Hi !

So here is the patch:
- 'new->tid' is replaced by a temporary 'tid' which value is forgotten
- and 'new->tid' is now set in the tftpd_receive_request() thread.

Do you see any problems with this patch Jean-Pierre ?

Regards,

  Ludovic

--
www.palmopensource.com  - The PalmOS open source portal
www.drolez.com          - Personal site
--- atftp-0.7.orig/tftpd.c
+++ atftp-0.7/tftpd.c
@@ -157,6 +157,7 @@
      struct servent *serv;
      struct passwd *user;
      struct group *group;
+     pthread_t tid;
 
 #ifdef HAVE_MTFTP
      pthread_t mtftp_thread;
@@ -466,7 +467,7 @@
                new->client_info->next = NULL;
                
                /* Start a new server thread. */
-               if (pthread_create(&new->tid, NULL, tftpd_receive_request,
+               if (pthread_create(&tid, NULL, tftpd_receive_request,
                                   (void *)new) != 0)
                {
                     logger(LOG_ERR, "Failed to start new thread");
@@ -567,7 +568,8 @@
 
      /* Detach ourself. That way the main thread does not have to
       * wait for us with pthread_join. */
-     pthread_detach(pthread_self());
+     data->tid = pthread_self();
+     pthread_detach(data->tid);
 
      /* Read the first packet from stdin. */
      data_size = data->data_buffer_size;     
@@ -732,8 +734,8 @@
      tftpd_clientlist_free(data);
 
      /* free the thread structure */
-     free(data);
-     
+     free(data);    
+
      logger(LOG_INFO, "Server thread exiting");
      pthread_exit(NULL);
 }

Reply via email to