X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Flink.c;h=afd54eb1dca730467e4aa19a82faeb79a11012ea;hb=fe313c1dda9bd0e062f5ce88c3d990199799aa1b;hp=6cdb2bc42d830ed9903884f2a068b4e347bb088c;hpb=775bf8013abe9fe4ef3d4883ea2e43bba2a84da1;p=tpg%2Facess2.git diff --git a/Modules/IPStack/link.c b/Modules/IPStack/link.c index 6cdb2bc4..afd54eb1 100644 --- a/Modules/IPStack/link.c +++ b/Modules/IPStack/link.c @@ -17,6 +17,7 @@ void Link_WatchDevice(tAdapter *Adapter); // === GLOBALS === int giRegisteredTypes = 0; + int giRegisteredTypeSpace = 0; struct { Uint16 Type; tPacketCallback Callback; @@ -50,14 +51,18 @@ void Link_RegisterType(Uint16 Type, tPacketCallback Callback) if(i == -1) { - tmp = realloc(gaRegisteredTypes, (giRegisteredTypes+1)*sizeof(*gaRegisteredTypes)); + giRegisteredTypeSpace += 5; + tmp = realloc(gaRegisteredTypes, giRegisteredTypeSpace*sizeof(*gaRegisteredTypes)); if(!tmp) { - Log_Warning("NET", "Out of heap space!"); + Log_Warning("NET", + "Out of heap space! (Attempted to allocate %i)", + giRegisteredTypeSpace*sizeof(*gaRegisteredTypes) + ); return ; } + gaRegisteredTypes = tmp; i = giRegisteredTypes; giRegisteredTypes ++; - gaRegisteredTypes = tmp; } gaRegisteredTypes[i].Callback = Callback; @@ -122,7 +127,7 @@ void Link_WatchDevice(tAdapter *Adapter) ret = VFS_Read(Adapter->DeviceFD, MAX_PACKET_SIZE, buf); if(ret == -1) break; - if(ret <= sizeof(tEthernetHeader)) { + if(ret <= (int)sizeof(tEthernetHeader)) { Log_Log("NET", "Recieved an undersized packet"); continue; } @@ -159,6 +164,8 @@ void Link_WatchDevice(tAdapter *Adapter) } Log_Log("NET", "Watcher terminated (file closed)"); + + Threads_Exit(0, 0); } // From http://www.cl.cam.ac.uk/research/srg/bluebook/21/crc/node6.html