libmicrohttpd
[Top][All Lists]
Advanced

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

[libmicrohttpd] Segfault


From: klemens
Subject: [libmicrohttpd] Segfault
Date: Fri, 3 Mar 2023 15:02:03 +0100
User-agent: Mutt/1.5.23 (2014-03-12)

Hi all,

I have an issue with a segfault I can't localize. I run MHD
from a binary package for DEBIAN11 and start the server with
the following code (similar to the post example) to serve a 
GET request:

int 
main (int argc, char **argv)
{
        time_t now;
        struct timeval tv;
        struct timeval *tvp;
        fd_set rs;
        fd_set ws;
        fd_set es;
        MHD_socket max;
        MHD_UNSIGNED_LONG_LONG mhd_timeout;

        mylast_alive = (unsigned int)time(&now);
    if (!(hka = hkaconn ()))
    {
        fprintf (stderr, "%s\n", mysql_error(&hkahdl));
        exit (1);
    }
        srand ((unsigned int)time(&now));
        vbad = 
        MHD_start_daemon (      MHD_USE_ERROR_LOG,
                                                1431, 
                                                &on_client_connect, myclient_ip,
                                                &create_response, NULL,
                        MHD_OPTION_NOTIFY_COMPLETED,
                        MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int)120,
                        MHD_OPTION_CONNECTION_LIMIT, (unsigned int)500,
                                                MHD_OPTION_END
                                         );
        if (NULL == vbad)
                return (emsg ("Can't create daemon"));
        while (1)
        {
                expire_sessions ();
                printf ("Nach EXP_SESS\n");
                max = 0;
                FD_ZERO (&rs);
                FD_ZERO (&ws);
                FD_ZERO (&es);
                if (MHD_YES != MHD_get_fdset (vbad, &rs, &ws, &es, &max))
                        break; /* fatal internal error */
                if (MHD_get_timeout (vbad, &mhd_timeout) == MHD_YES)
                {
                tv.tv_sec = mhd_timeout / 1000;
                tv.tv_usec = (mhd_timeout - (tv.tv_sec * 1000)) * 1000;
                tvp = &tv;
                }
                else
                tvp = NULL;
                if (-1 == select (max + 1, &rs, &ws, &es, tvp))
                {
                if (EINTR != errno)
                abort ();
                }
                printf ("Nach SELECT\n");
                MHD_run (vbad);
                printf ("Nach RUN\n");
                
        }
        MHD_stop_daemon (vbad);
        return 0;
}/*end main*/

The request is properly served and the webpage appears on the
browser as it should. create_response() ends like this:

        {
        ....
            ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
            MHD_destroy_response (response);
                printf ("Nach destroy\n");
            return MHD_YES;
        }

Immediately after the printout, I get a segfault. Using gdb yields

Reading symbols from ./vbad...
(gdb) run 
Starting program: /home/klemens/progc/vba/vbad 
[Thread debugging using libthread_db enabled]
Using host libthread_db library
"/lib/x86_64-linux-gnu/libthread_db.so.1".
Nach EXP_SESS
Nach SELECT
Nach RUN
Nach EXP_SESS
Nach SELECT
CR1
CR2
CR3
URL>>/nz7eR48JKpV/GU0t36aWnw==<<
NEWSN>>5CA207CF66C5FC7378B31FD151F8ECC9|1<<
Nach GETPAGE
Nach destroy

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000003 in ?? ()

and I have no idea what causes the segfault and where this
happens. Any help is higly appreciated.

kginbg. 





reply via email to

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