diff options
author | Lukas Larsson <[email protected]> | 2014-03-17 18:05:09 +0100 |
---|---|---|
committer | Lukas Larsson <[email protected]> | 2014-03-26 15:18:58 +0100 |
commit | f4522575a15dd41caf13d2c36eb454407fb3836e (patch) | |
tree | c0ede1675a26152e0f0f5f02789231742fbda75b /erts/emulator/sys/ose/sys.c | |
parent | c4e7924f48e629319a8a0f74e73116319ba98423 (diff) | |
download | otp-f4522575a15dd41caf13d2c36eb454407fb3836e.tar.gz otp-f4522575a15dd41caf13d2c36eb454407fb3836e.tar.bz2 otp-f4522575a15dd41caf13d2c36eb454407fb3836e.zip |
ose: Print faults in aio sys driver calls
Diffstat (limited to 'erts/emulator/sys/ose/sys.c')
-rw-r--r-- | erts/emulator/sys/ose/sys.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/erts/emulator/sys/ose/sys.c b/erts/emulator/sys/ose/sys.c index f1bac6897a..aaf515876f 100644 --- a/erts/emulator/sys/ose/sys.c +++ b/erts/emulator/sys/ose/sys.c @@ -195,7 +195,9 @@ static volatile int children_died; write_buff += sizeof(struct aiocb *); \ memcpy(write_buff,BUFF,SIZE+1); \ SET_AIO(*write_req,FD,SIZE,write_buff); \ - aio_write(write_req); \ + if (aio_write(write_req)) \ + ramlog_printf("%s:%d: write failed with %d\n", \ + __FILE__,__LINE__,errno); \ } \ } while(0) @@ -213,7 +215,9 @@ static volatile int children_died; /* When we have several schedulers, we need to make sure * that scheduler issuing aio_dispatch() is the owner on the signal */ #define DISPATCH_AIO(sig) do { \ - aio_dispatch(sig); \ + if (aio_dispatch(sig)) \ + ramlog_printf("%s:%d: dispatch failed with %d\n", \ + __FILE__,__LINE__,errno); \ } while(0) @@ -843,7 +847,11 @@ set_driver_data(ErlDrvPort port_num, /* READ */ if (read_write & DO_READ) { - efs_examine_fd(ifd, FLIB_FD_HANDLE, &driver_data[ifd].handle, 0); + EfsStatus res = efs_examine_fd(ifd, FLIB_FD_HANDLE, + &driver_data[ifd].handle, 0); + if (res != EFS_SUCCESS) + ramlog_printf("%s:%d: efs_examine_fd(%d) failed with %d\n", + __FILE__,__LINE__,ifd,errno); driver_data[ifd].ifd = ifd; driver_data[ifd].packet_bytes = packet_bytes; driver_data[ifd].port_num = port_num; @@ -885,7 +893,9 @@ set_driver_data(ErlDrvPort port_num, (void) driver_select(port_num, driver_data[ifd].input_event, (ERL_DRV_READ | ERL_DRV_USE), 1); - aio_read(&driver_data[ifd].aiocb); + if (aio_read(&driver_data[ifd].aiocb)) + ramlog_printf("%s:%d: aio_read(%d) failed with %d\n", + __FILE__,__LINE__,ifd,errno); } else { /* WRITE ONLY */ efs_examine_fd(ofd, FLIB_FD_HANDLE, &driver_data[ofd].handle, 0); @@ -1420,7 +1430,9 @@ static void ready_input(ErlDrvData drv_data, ErlDrvEvent ready_fd) memset((void *)data->aiocb.aio_buf, 0, 255); if (res > 0) { - aio_read(&data->aiocb); + if (aio_read(&data->aiocb)) + ramlog_printf("%s:%d: aio_read(%d) failed with %d\n", + __FILE__,__LINE__,data->ifd,errno); } } sig = erl_drv_ose_get_signal(ready_fd); |