X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Ftlsproxy.c;h=0eefaa3e22ddae4bf9ff799b9ba857a16bd3b04e;hb=8f25becb220b321f0e9bd4b766ae7085a0335466;hp=401553f52e4d922846c4c9da664f9cf3bd67c416;hpb=62bffb28964ae13d193414f747a25703a2583f77;p=tlsproxy%2Ftlsproxy.git diff --git a/src/tlsproxy.c b/src/tlsproxy.c index 401553f..0eefaa3 100644 --- a/src/tlsproxy.c +++ b/src/tlsproxy.c @@ -31,9 +31,8 @@ #include #include -/* For GnuTLS. */ +/* Necessary for GnuTLS when used with threads. */ #include - GCRY_THREAD_OPTION_PTHREAD_IMPL; @@ -77,7 +76,7 @@ static void print_usage(const char *argv); static void initialize_gnutls(void); static void deinitialize_gnutls(void); -static void worker_thread(void); +static void *worker_thread(void *unused); int main(int argc, char **argv) { @@ -137,19 +136,11 @@ int main(int argc, char **argv) { return EXIT_FAILURE; } for (i = 0; i < thread_count; i++) { - int result; - pthread_t thread; - - result = pthread_create(&thread, NULL, - (void * (*)(void *))&worker_thread, - NULL); - if (result != 0) { - fprintf(stderr, "failed to create worker thread: %s\n", - strerror(result)); + errno = pthread_create(threads + i, NULL, &worker_thread, NULL); + if (errno != 0) { + perror("failed to create worker thread"); return EXIT_FAILURE; } - - threads[i] = thread; } #ifdef USE_IPV4_ONLY @@ -269,13 +260,13 @@ static void parse_arguments(int argc, char **argv) { while ((option = getopt(argc, argv, "d:p:t:uh?")) != -1) { switch (option) { case 'd': { - if (atoi(optarg) < 0) { + global_log_level = atoi(optarg); + if (global_log_level < 0) { print_usage(argv[0]); fprintf(stderr, "\n-d positive number required: '%s'\n", optarg); exit(EXIT_FAILURE); } - global_log_level = atoi(optarg); break; } case 'p': { @@ -353,18 +344,18 @@ static void print_usage(const char *argv) { static void initialize_gnutls(void) { int result; - gcry_error_t error = 0; + gcry_error_t error; /* Thread safe setup. Must be called before gnutls_global_init(). */ error = gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); - if (error) { + if (error != 0) { fprintf(stderr, "gcry_control(): %s/%s\n", gcry_strsource(error), gcry_strerror(error)); exit(EXIT_FAILURE); } /* Prevent usage of blocking /dev/random. */ error = gcry_control(GCRYCTL_ENABLE_QUICK_RANDOM, 0); - if (error) { + if (error != 0) { fprintf(stderr, "gcry_control(): %s/%s\n", gcry_strsource(error), gcry_strerror(error)); exit(EXIT_FAILURE); @@ -391,9 +382,11 @@ static void deinitialize_gnutls(void) { gnutls_global_deinit(); } -static void worker_thread(void) { +static void *worker_thread(void *unused) { int client_socket; + (void)unused; + for (;;) { /* Get next element from ring buffer. */ P(ringbuffer_full); @@ -410,4 +403,6 @@ static void worker_thread(void) { handle_connection(client_socket); } + + return NULL; }