diff options
| author | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-08-08 10:29:06 +0200 | 
|---|---|---|
| committer | Sander Vrijders <sander.vrijders@intec.ugent.be> | 2016-08-08 10:29:06 +0200 | 
| commit | c1e1831ded0330771fd175f1c8138ed82c90f9f8 (patch) | |
| tree | 617e3002ffa5addb364c01d5cd925d8c609b12b5 /src/tools | |
| 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')
| -rw-r--r-- | src/tools/cbr/cbr.c | 6 | ||||
| -rw-r--r-- | src/tools/cbr/cbr_server.c | 22 | ||||
| -rw-r--r-- | src/tools/oping/oping_client.c | 8 | ||||
| -rw-r--r-- | src/tools/oping/oping_server.c | 8 | 
4 files changed, 23 insertions, 21 deletions
| diff --git a/src/tools/cbr/cbr.c b/src/tools/cbr/cbr.c index 0cce50db..65783119 100644 --- a/src/tools/cbr/cbr.c +++ b/src/tools/cbr/cbr.c @@ -75,8 +75,10 @@ int main(int argc, char ** argv)          bool server = false; -        /* FIXME: should be argv[0] */ -        ap_init(argv[0]); +        if (ap_init(argv[0]) < 0) { +                printf("Failed to init.\n"); +                exit(EXIT_FAILURE); +        }          server_settings.interval = 1; /* One second reporting interval */          server_settings.timeout  = 1; diff --git a/src/tools/cbr/cbr_server.c b/src/tools/cbr/cbr_server.c index 1890c842..fc23363f 100644 --- a/src/tools/cbr/cbr_server.c +++ b/src/tools/cbr/cbr_server.c @@ -47,18 +47,11 @@ pthread_cond_t  fds_signal;  void shutdown_server(int signo, siginfo_t * info, void * c)  { -        int i; -          switch(signo) {          case SIGINT:          case SIGTERM:          case SIGHUP:                  pthread_cancel(listen_thread); - -                for (i = 0; i < THREADS_SIZE; i++) { -                        pthread_cancel(threads[i]); -                } -          default:                  return;          } @@ -226,19 +219,18 @@ int server_main()                  exit(EXIT_FAILURE);          } -        for (i = 0; i < THREADS_SIZE; i++) { -                pthread_create(&threads[i], NULL, -                               worker, NULL); -        } +        for (i = 0; i < THREADS_SIZE; i++) +                pthread_create(&threads[i], NULL, worker, NULL); -        pthread_create(&listen_thread, NULL, -                       listener, NULL); +        pthread_create(&listen_thread, NULL, listener, NULL);          pthread_join(listen_thread, NULL); -        for (i = 0; i < THREADS_SIZE; i++) { +        for (i = 0; i < THREADS_SIZE; i++) +                pthread_cancel(threads[i]); + +        for (i = 0; i < THREADS_SIZE; i++)                  pthread_join(threads[i], NULL); -        }          return 0;  } 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; | 
