[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libmicrohttpd] Extra worker thread on failed daemon start

From: Jared Cantwell
Subject: [libmicrohttpd] Extra worker thread on failed daemon start
Date: Tue, 12 May 2015 20:47:25 -0600


I'm debugging a problem with a crash in MHD_select_thread.  We had MHD_start_daemon_va fail while creating worker threads with the following error: "file descriptor for worker control pipe exceeds maximum value".  We know what caused this error and are fixing it.  But the problem was that a MHD_select_thread worker thread was left running in the background after MHD_start_daemon_va returned failure.  I think the problem is from this code in the thread_failed case in daemon.c:

  /* Shutdown worker threads we've already created. Pretend
     as though we had fully initialized our daemon, but
     with a smaller number of threads than had been
     requested. */
  daemon->worker_pool_size = i - 1;
  MHD_stop_daemon (daemon);
  return NULL;

From the code, it looks like "i" is actually the number of threads that were successfully created, so the "i - 1" in this code will leave an extra thread hanging since MHD_stop_daemon will clean up one less thread than it should.  I'll probably try to work up a test to verify removing the "- 1" is correct, but that could take me some time so I wanted to make sure I wasn't missing something obvious before heading down that path.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]