X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Flink.c;h=07234df05b0ece0c7c770efde8bdeb31b0399a3d;hb=f429a25f24ffd4762d59bee5f7122ac06881f3ca;hp=d91457043d70d2bd652311a9119cc5a8df2551e1;hpb=e939fc0ced4d445c24696636fe660dddbe035b1c;p=tpg%2Facess2.git diff --git a/Modules/IPStack/link.c b/Modules/IPStack/link.c index d9145704..07234df0 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,17 +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! (Attempted to allocate %i)", - (giRegisteredTypes+1)*sizeof(*gaRegisteredTypes) + giRegisteredTypeSpace*sizeof(*gaRegisteredTypes) ); return ; } + gaRegisteredTypes = tmp; i = giRegisteredTypes; giRegisteredTypes ++; - gaRegisteredTypes = tmp; } gaRegisteredTypes[i].Callback = Callback; @@ -122,10 +124,11 @@ void Link_WatchDevice(tAdapter *Adapter) Uint32 checksum; // Wait for a packet (Read on a network device is blocking) + Log_Debug("NET", "Waiting on adapter FD#0x%x", Adapter->DeviceFD); 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; } @@ -162,6 +165,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