diff options
author | Sander Vrijders <[email protected]> | 2016-08-08 10:29:06 +0200 |
---|---|---|
committer | Sander Vrijders <[email protected]> | 2016-08-08 10:29:06 +0200 |
commit | c1e1831ded0330771fd175f1c8138ed82c90f9f8 (patch) | |
tree | 617e3002ffa5addb364c01d5cd925d8c609b12b5 /src/tools/oping | |
parent | d5b71449bc18116444720257ba640e3c597ff6e9 (diff) | |
parent | 8450af0e2950e5a1415e38702d6169cc8a732294 (diff) | |
download | ouroboros-c1e1831ded0330771fd175f1c8138ed82c90f9f8.tar.gz ouroboros-c1e1831ded0330771fd175f1c8138ed82c90f9f8.zip |
Merged in dstaesse/ouroboros/be-bugfixing (pull request #187)
bugfixes
Diffstat (limited to 'src/tools/oping')
-rw-r--r-- | src/tools/oping/oping_client.c | 8 | ||||
-rw-r--r-- | src/tools/oping/oping_server.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/tools/oping/oping_client.c b/src/tools/oping/oping_client.c index 7693ce41..0d4a10af 100644 --- a/src/tools/oping/oping_client.c +++ b/src/tools/oping/oping_client.c @@ -115,7 +115,8 @@ void * writer(void * o) { int * fdp = (int *) o; struct timespec now; - struct timespec wait = {client.interval / 1000, client.interval % 1000}; + struct timespec wait = {client.interval / 1000, + (client.interval % 1000) * MILLION}; struct oping_msg * msg; char * buf = malloc(client.size); @@ -132,12 +133,15 @@ void * writer(void * o) printf("Pinging %s with %d bytes of data:\n\n", client.s_apn, client.size); + pthread_cleanup_push((void (*) (void *)) free, buf); + while (client.sent < client.count) { nanosleep(&wait, NULL); msg->id = htonl(client.sent); if (flow_write(*fdp, buf, client.size) == -1) { printf("Failed to send SDU.\n"); flow_dealloc(*fdp); + free(buf); return (void *) -1; } @@ -148,6 +152,8 @@ void * writer(void * o) pthread_mutex_unlock(&client.lock); } + pthread_cleanup_pop(true); + return (void *) 0; } diff --git a/src/tools/oping/oping_server.c b/src/tools/oping/oping_server.c index eb0b511b..a5021cba 100644 --- a/src/tools/oping/oping_server.c +++ b/src/tools/oping/oping_server.c @@ -37,9 +37,7 @@ void shutdown_server(int signo, siginfo_t * info, void * c) case SIGINT: case SIGTERM: case SIGHUP: - pthread_cancel(server.server_pt); pthread_cancel(server.accept_pt); - pthread_cancel(server.cleaner_pt); default: return; } @@ -154,8 +152,12 @@ int server_main() pthread_create(&server.accept_pt, NULL, accept_thread, NULL); pthread_create(&server.server_pt, NULL, server_thread, NULL); - pthread_join(server.server_pt, NULL); pthread_join(server.accept_pt, NULL); + + pthread_cancel(server.server_pt); + pthread_cancel(server.cleaner_pt); + + pthread_join(server.server_pt, NULL); pthread_join(server.cleaner_pt, NULL); return 0; |