This seems kind-of OK (I personally think pthread_detach is always messy
and in 99.9% of cases a bad idea).
Hm... Could you point the disadvantages of using detached threads? I'm a little newbie with this feature of pthreads.
I'm going to use suspend/resume and pthread in requests that takes a long time processing read-only data (e.g. report generation) that could block the main loop, but "discard" them if the server stops.
hat you do need to (somehow) ensure
is that you do MHD_resume_connection() (and let it finish) *before*
calling MHD_stop_daemon().
The current design looks like this:
static void *bar_cb(void *cls) {
MHD_resume_connection(... con sent with cls above ...);
... calls the user-defined callback sent with cls above ...
pthread_exit(NULL);
return NULL;
}
// foo() is called inside a MHD_AccessHandlerCallback
int foo(... some params ...) {
... some param checking ...
MHD_suspend_connection(con);
ret =
pthread_create(detached_thread, NULL, bar_cb, cls);
if (ret != 0)
goto error;
ret = pthread_detach(detached_thread);
if (ret != 0)
goto error;
return 0;
error:
... some error handling ...
return ret;
}
The MHD_resume_connection() was called before calling the user-defined callback to avoid "MHD_stop_daemon() called while we have suspended connections". :-)
BTW I'm OK to remove the pthread_detach() if it could raise future problems in my application.