Report the actual error when read() or write() a network device failed.
This enable to actually detect and handle device removal (USB...). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37897 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -278,7 +278,7 @@ ethernet_send_data(net_device *_device, net_buffer *buffer)
|
|||||||
device->stats.send.errors++;
|
device->stats.send.errors++;
|
||||||
if (allocated)
|
if (allocated)
|
||||||
gBufferModule->free(allocated);
|
gBufferModule->free(allocated);
|
||||||
return bytesWritten;
|
return errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
device->stats.send.packets++;
|
device->stats.send.packets++;
|
||||||
@@ -323,7 +323,7 @@ ethernet_receive_data(net_device *_device, net_buffer **_buffer)
|
|||||||
bytesRead = read(device->fd, data, device->frame_size);
|
bytesRead = read(device->fd, data, device->frame_size);
|
||||||
if (bytesRead < 0) {
|
if (bytesRead < 0) {
|
||||||
device->stats.receive.errors++;
|
device->stats.receive.errors++;
|
||||||
status = bytesRead;
|
status = errno;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
//dump_block((const char *)data, bytesRead, "rcv: ");
|
//dump_block((const char *)data, bytesRead, "rcv: ");
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ device_reader_thread(void* _interface)
|
|||||||
}
|
}
|
||||||
|
|
||||||
fifo_enqueue_buffer(&interface->receive_queue, buffer);
|
fifo_enqueue_buffer(&interface->receive_queue, buffer);
|
||||||
|
} else if (status == B_DEVICE_NOT_FOUND) {
|
||||||
|
device_removed(device);
|
||||||
} else {
|
} else {
|
||||||
// In case of error, give the other threads some
|
// In case of error, give the other threads some
|
||||||
// time to run since this is a high priority time thread.
|
// time to run since this is a high priority time thread.
|
||||||
|
|||||||
Reference in New Issue
Block a user