On 01/24/2018 04:37 PM, Yann Ylavic wrote:
> Hi Stefan,
> 
> On Wed, Jan 24, 2018 at 3:39 PM, Stefan Eissing
> <[email protected]> wrote:
>>
>> ./configure --prefix=/home/sei/projects/httpd/h2fuzz/gen/apache 
>> --enable-nghttp2-staticlib-deps 
>> --with-nghttp2=/home/sei/projects/httpd/h2fuzz/gen/apache --with-mpm=event 
>> --enable-unixd --disable-pie --enable-mods-static=few --enable-http2
> 
> Did you "make distclean; ./buildconf" before?
> 
>>
>> linker exits with:
>> httpd-trunk/server/mpm/event/event.c:2457: undefined reference to 
>> `ap_queue_create'
> 
> Hmm, can't reproduce (with distclean above).
> I'm surely missing something...
> 

When I try to start httpd I get

Cannot load modules/mod_mpm_event.so into server: 
/usr/src/apache/apache_trunk/modules/mod_mpm_event.so: undefined
symbol: ap_queue_info_wait_for_idler

And I compiled from a fresh checkout with

make extraclean ./buildconf;

I was able to fix this by

Index: server/mpm_fdqueue.c
===================================================================
--- server/mpm_fdqueue.c        (revision 1822275)
+++ server/mpm_fdqueue.c        (working copy)
@@ -145,7 +145,7 @@
     }
 }

-apr_status_t ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info,
+AP_DECLARE(apr_status_t) ap_queue_info_wait_for_idler(fd_queue_info_t 
*queue_info,
                                           int *had_to_block)
 {
     apr_status_t rv;
Index: server/mpm_fdqueue.h MPM
===================================================================
--- server/mpm_fdqueue.h        (revision 1822275)
+++ server/mpm_fdqueue.h        (working copy)
@@ -51,7 +51,7 @@
 apr_status_t ap_queue_info_set_idle(fd_queue_info_t *queue_info,
                                     apr_pool_t *pool_to_recycle);
 apr_status_t ap_queue_info_try_get_idler(fd_queue_info_t *queue_info);
-apr_status_t ap_queue_info_wait_for_idler(fd_queue_info_t *queue_info,
+AP_DECLARE(apr_status_t) ap_queue_info_wait_for_idler(fd_queue_info_t 
*queue_info,
                                           int *had_to_block);
 apr_uint32_t ap_queue_info_num_idlers(fd_queue_info_t *queue_info);
 apr_status_t ap_queue_info_term(fd_queue_info_t *queue_info);


and putting mpm_fdqueue.h in the include directory, but I guess this makes it 
part of the public API which we wanted to
avoid.

I guess the other option is to link mpm_fdqueue.o into the MPM shared object, 
but I guess I haven't found the correct
approach to do this. But this also means that we will have mpm_fdqueue.o in 
every MPM shared object which might be
a little contrary to the goal of having things shared (at least not on binary 
level).

Regards

RĂ¼diger

Reply via email to