X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=test%2Fchannels-aio-cornercases.c;h=208c9553da08b9f1b6ea6c1155fc55af4995ffd2;hp=dba4de51e11cc3dde228c20fe683f16694a3b84f;hb=d1b43b5060795728b95b4ed3311b3398771cf34e;hpb=1a023116b9d5e9a8fa93e81fcef725fd7b343593 diff --git a/test/channels-aio-cornercases.c b/test/channels-aio-cornercases.c index dba4de51..208c9553 100644 --- a/test/channels-aio-cornercases.c +++ b/test/channels-aio-cornercases.c @@ -12,7 +12,7 @@ #include "meshlink.h" #include "utils.h" -static const size_t size = 10000000; // size of data to transfer +static const size_t size = 12000000; // size of data to transfer struct aio_info { int port; @@ -72,7 +72,6 @@ static bool accept_cb(meshlink_handle_t *mesh, meshlink_channel_t *channel, uint case 4: assert(meshlink_channel_aio_receive(mesh, channel, info->data, size / 4, aio_cb_close, &info->aio_infos[0])); assert(meshlink_channel_aio_receive(mesh, channel, info->data + size / 4, size - size / 4, aio_cb, &info->aio_infos[1])); - set_sync_flag(&info->aio_infos[1].flag, true); break; default: @@ -151,23 +150,32 @@ int main(void) { if(i < 2) { assert(meshlink_channel_aio_send(mesh_a, channels[i], outdata, size / 3, aio_cb, &out_infos[i].aio_infos[0])); assert(meshlink_channel_aio_send(mesh_a, channels[i], outdata + size / 3, size - size / 3, aio_cb_close, &out_infos[i].aio_infos[1])); - assert(wait_sync_flag(&out_infos[i].aio_infos[0].flag, 10)); - assert(wait_sync_flag(&out_infos[i].aio_infos[1].flag, 10)); } else { assert(meshlink_channel_aio_send(mesh_a, channels[i], outdata, size / 3, aio_cb_close, &out_infos[i].aio_infos[0])); assert(meshlink_channel_aio_send(mesh_a, channels[i], outdata + size / 3, size - size / 3, aio_cb, &out_infos[i].aio_infos[1])); - assert(wait_sync_flag(&out_infos[i].aio_infos[0].flag, 10)); - set_sync_flag(&out_infos[i].aio_infos[1].flag, true); } } // Wait for all AIO buffers to finish. for(size_t i = 0; i < nchannels; i++) { + // The first chunk should always have succeeded assert(wait_sync_flag(&in_infos[i].aio_infos[0].flag, 10)); - assert(wait_sync_flag(&in_infos[i].aio_infos[1].flag, 10)); assert(wait_sync_flag(&out_infos[i].aio_infos[0].flag, 10)); - assert(wait_sync_flag(&out_infos[i].aio_infos[1].flag, 10)); + + // The second chunk should only have completed if we didn't close the channel yet + if(i % 2) { + assert(!check_sync_flag(&in_infos[i].aio_infos[1].flag)); + } else { + assert(wait_sync_flag(&in_infos[i].aio_infos[1].flag, 10)); + } + + if(i < 2) { + assert(wait_sync_flag(&out_infos[i].aio_infos[1].flag, 10)); + } else { + assert(!check_sync_flag(&out_infos[i].aio_infos[1].flag)); + } + } // Check that everything is correct.