| 330 | } |
| 331 | |
| 332 | ACTOR static Future<int> read_impl(int fd, void* data, int length, int64_t offset) { |
| 333 | state TaskPriority taskID = g_network->getCurrentTask(); |
| 334 | state Promise<Void> p; |
| 335 | // fprintf(stderr, "eio_read (fd=%d length=%d offset=%lld)\n", fd, length, offset); |
| 336 | state eio_req* r = eio_read(fd, data, length, offset, 0, eio_callback, &p); |
| 337 | try { |
| 338 | wait(p.getFuture()); |
| 339 | } catch (...) { |
| 340 | g_network->setCurrentTask(taskID); |
| 341 | eio_cancel(r); |
| 342 | throw; |
| 343 | } |
| 344 | try { |
| 345 | state int result = r->result; |
| 346 | // printf("eio read: %d/%d\n", r->result, length); |
| 347 | if (result == -1) { |
| 348 | error("ReadError", fd, r); |
| 349 | throw internal_error(); |
| 350 | } else { |
| 351 | wait(delay(0, taskID)); |
| 352 | return result; |
| 353 | } |
| 354 | } catch (Error& _e) { |
| 355 | state Error e = _e; |
| 356 | wait(delay(0, taskID)); |
| 357 | throw e; |
| 358 | } |
| 359 | } |
| 360 | |
| 361 | ACTOR static Future<Void> write_impl(int fd, Reference<ErrorInfo> err, StringRef data, int64_t offset) { |
| 362 | state TaskPriority taskID = g_network->getCurrentTask(); |
nothing calls this directly
no test coverage detected