mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-25 04:09:31 +03:00
bb9de15b30d7f49dc661d2b306c192b4b50e2bce
From: Erik Slagter <erik@slagter.name> To: Christian Grothoff <grothoff@net.in.tum.de> CC: libmicrohttpd@gnu.org Date: Yesterday 17:31:46 Spam Status: Spamassassin 0% probability of being spam. Full report: Probability=No, score=-2.6 required=7.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VERIFIED autolearn=ham version=3.2.5-tuminfo_1 > >> I think I found & fixed the issue in SVN 12778. Please try SVN HEAD and > > > report if it fixes the problem. > > Okay, will do so. But first I'll be on vacation for two weeks. > Sure. The issue indeed has been solved. It's quite a pity the distribution's packages lag behind by ages, so again I'll have to make my own packages now. I've run into another problem and also I think I have found the cause. When a connection is closed by the peer, my application tends to segfault. GDB says: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 0x7ffff6a6c710 (LWP 27005)] 0x00007ffff77a4db0 in pthread_mutex_lock () from /lib64/libpthread.so.0 Missing separate debuginfos, use: debuginfo-install glibc-2.11.2-1.x86_64 libgcc-4.4.4-10.fc12.x86_64 libid3tag-0.15.1b-9.fc12.x86_64 libstdc++-4.4.4-10.fc12.x86_64 zlib-1.2.3-23.fc12.x86_64 (gdb) where #0 0x00007ffff77a4db0 in pthread_mutex_lock () from /lib64/libpthread.so.0 #1 0x00007ffff7bd97ce in MHD_destroy_response (response=0x7ffff7ed5010) at response.c:341 #2 0x00007ffff7bd760f in MHD_cleanup_connections (daemon=0x62eb60) at daemon.c:964 #3 0x00007ffff7bd8fbc in MHD_select_thread (cls=0x62eb60) at daemon.c:1205 #4 0x00007ffff77a2a3a in start_thread () from /lib64/libpthread.so.0 #5 0x00007ffff6d6077d in clone () from /lib64/libc.so.6 #6 0x0000000000000000 in ?? () It looks like pos->response is being "destroyed" twice. If I remove one of the instances, the segfault is gone. Index: src/daemon/daemon.c =================================================================== --- src/daemon/daemon.c (revision 12985) +++ src/daemon/daemon.c (working copy) @@ -952,7 +952,7 @@ abort(); } } - MHD_destroy_response (pos->response); + // MHD_destroy_response (pos->response); MHD_pool_destroy (pos->pool); #if HTTPS_SUPPORT if (pos->tls_session != NULL)
About ===== libmicrohttpd is a GNU library (part of the GNU project) written in C that provides a compact API and implementation of an HTTP 1.1 web server (HTTP 1.0 is also supported). libmicrohttpd only implements the HTTP 1.1 protocol. The main application must still provide the content. Installation ============ If you are using Subversion, run "autoreconf -fi" to create configure. In order to run the testcases, you need a recent version of libcurl. libcurl is not required if you just want to install the library. Especially for development, do use the MHD_USE_DEBUG option to get error messages. Configure options ================= If you are concerned about space, you should set "CFLAGS" to "-Os -fomit-frame-pointer" to have gcc generate tight code. You can use the following options to disable certain MHD features: --disable-https: no HTTPS / TLS / SSL support (significant reduction) --disable-messages: no error messages (they take space!) --disable-postprocessor: no MHD_PostProcessor API --disable-dauth: no digest authentication API The resulting binary should be about 30-40k depending on the platform. Portability =========== The latest version of libmicrohttpd will try to avoid SIGPIPE on its sockets. This should work on OS X, Linux and recent BSD systems (at least). On other systems that may trigger a SIGPIPE on send/recv, the main application should install a signal handler to handle SIGPIPE. libmicrohttpd should work well on GNU/Linux, BSD, OS X, W32 and z/OS. Note that HTTPS is not supported on z/OS (yet). We also have reports of users using it on vxWorks and Symbian. Note that on platforms where the compiler does not support the "constructor" attribute, you must call "MHD_init" before using any MHD functions and "MHD_fini" after you are done using MHD. Notes on compiling on z/OS: --------------------------- After extracting the archive, run iconv -f UTF-8 -t IBM-1047 contrib/ascebc > /tmp/ascebc.sh chmod +x /tmp/ascebc.sh for n in `find * -type f` do /tmp/ascebc.sh $n done to convert all source files to EBCDIC. Note that you must run "configure" from the directory where the configure script is located. Otherwise, configure will fail to find the "contrib/xcc" script (which is a wrapper around the z/OS c89 compiler). Development Status ================== This is a beta release. Below we list things that should be implemented (in order of importance) before we can claim to be reasonably complete. Untested features: ================== - add testcases for http/1.1 pipelining (need to figure out how to ensure curl pipelines -- and it seems libcurl has issues with pipelining, see http://curl.haxx.se/mail/lib-2007-12/0248.html) - add testcases for resource limit enforcement - add testcases for client queuing early response, suppressing 100 CONTINUE - extend testcase for chunked encoding to validate handling of footers - more testing for SSL support Functions not covered by "make check": ====================================== - MHD_get_connection_values - MHD_set_connection_value - parse_cookie_header - parse_arguments - MHD_del_response_header - MHD_get_response_headers - MHD_tls_connection_close Missing documentation: ====================== - manual: * document configuration options * document details on porting MHD (plibc, z/OS)
Languages
C
86.4%
M4
10.3%
Shell
1.9%
Makefile
1.3%