Author: phoudoin Date: 2010-08-04 13:11:56 +0200 (Wed, 04 Aug 2010) New Revision: 37897 Changeset: http://dev.haiku-os.org/changeset/37897 Modified: haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp haiku/trunk/src/add-ons/kernel/network/stack/device_interfaces.cpp Log: Report the actual error when read() or write() a network device failed. This enable to actually detect and handle device removal (USB...). Modified: haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp 2010-08-04 10:35:40 UTC (rev 37896) +++ haiku/trunk/src/add-ons/kernel/network/devices/ethernet/ethernet.cpp 2010-08-04 11:11:56 UTC (rev 37897) @@ -278,7 +278,7 @@ device->stats.send.errors++; if (allocated) gBufferModule->free(allocated); - return bytesWritten; + return errno; } device->stats.send.packets++; @@ -323,7 +323,7 @@ bytesRead = read(device->fd, data, device->frame_size); if (bytesRead < 0) { device->stats.receive.errors++; - status = bytesRead; + status = errno; goto err; } //dump_block((const char *)data, bytesRead, "rcv: "); Modified: haiku/trunk/src/add-ons/kernel/network/stack/device_interfaces.cpp =================================================================== --- haiku/trunk/src/add-ons/kernel/network/stack/device_interfaces.cpp 2010-08-04 10:35:40 UTC (rev 37896) +++ haiku/trunk/src/add-ons/kernel/network/stack/device_interfaces.cpp 2010-08-04 11:11:56 UTC (rev 37897) @@ -66,6 +66,8 @@ } fifo_enqueue_buffer(&interface->receive_queue, buffer); + } else if (status == B_DEVICE_NOT_FOUND) { + device_removed(device); } else { // In case of error, give the other threads some // time to run since this is a high priority time thread.