Return-Path: Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: (qmail 33691 invoked from network); 12 May 2009 13:19:48 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 12 May 2009 13:19:48 -0000 Received: (qmail 51968 invoked by uid 500); 12 May 2009 13:19:47 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 51904 invoked by uid 500); 12 May 2009 13:19:47 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 51893 invoked by uid 99); 12 May 2009 13:19:47 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 12 May 2009 13:19:47 +0000 X-ASF-Spam-Status: No, hits=-0.4 required=10.0 tests=FB_DOUBLE_0WORDS,RCVD_IN_DNSWL_MED,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: local policy) Received: from [195.227.30.149] (HELO mailserver.kippdata.de) (195.227.30.149) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 12 May 2009 13:19:37 +0000 Received: from [195.227.30.209] (notebook-rj [195.227.30.209]) by mailserver.kippdata.de (8.13.5/8.13.5) with ESMTP id n4CDJCn7026334 for ; Tue, 12 May 2009 15:19:16 +0200 (CEST) Message-ID: <4A0976D5.1000302@kippdata.de> Date: Tue, 12 May 2009 15:17:09 +0200 From: Rainer Jung User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1b3pre) Gecko/20090223 Lightning/1.0pre Thunderbird/3.0b2 MIME-Version: 1.0 To: Tomcat Developers List Subject: Re: mod_jk 1.2.28 on i5/OS References: <6291fc850905120343w6649693t9e4bea806a4343e5@mail.gmail.com> <6291fc850905120404t3ec213c9xe890583d0b7dd237@mail.gmail.com> In-Reply-To: <6291fc850905120404t3ec213c9xe890583d0b7dd237@mail.gmail.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit X-Virus-Checked: Checked by ClamAV on apache.org Hi Henri, can you try the below patch? It replaces the global pool by a function local one, which is OK, because the resolver calls are not in the performance critical path (mostly startup initialization and reconfiguration). Why do you think, is it possible, that multiple threads will enter jk_resolve() in parallel? Regards, Rainer Index: jk_connect.c =================================================================== --- jk_connect.c (revision 763986) +++ jk_connect.c (working copy) @@ -35,7 +35,6 @@ #include "apr_errno.h" #include "apr_general.h" #include "apr_pools.h" -static apr_pool_t *jk_apr_pool = NULL; #endif #ifdef HAVE_SYS_FILIO_H @@ -342,17 +341,16 @@ #ifdef HAVE_APR apr_sockaddr_t *remote_sa, *temp_sa; char *remote_ipaddr; + apr_pool_t *jk_apr_pool = NULL; - if (!jk_apr_pool) { - if (apr_pool_create(&jk_apr_pool, (apr_pool_t *)pool) != APR_SUCCESS) { - JK_TRACE_EXIT(l); - return JK_FALSE; - } + if (apr_pool_create(&jk_apr_pool, (apr_pool_t *)pool) != APR_SUCCESS) { + JK_TRACE_EXIT(l); + return JK_FALSE; } - apr_pool_clear(jk_apr_pool); if (apr_sockaddr_info_get (&remote_sa, host, APR_UNSPEC, (apr_port_t) port, 0, jk_apr_pool) != APR_SUCCESS) { + apr_pool_destroy(jk_apr_pool); JK_TRACE_EXIT(l); return JK_FALSE; } @@ -367,12 +365,17 @@ if (NULL != temp_sa) remote_sa = temp_sa; else { + apr_pool_destroy(jk_apr_pool); JK_TRACE_EXIT(l); return JK_FALSE; } apr_sockaddr_ip_get(&remote_ipaddr, remote_sa); + /* No more use of data allocated from the jk_apr_pool + * APR pool below this line */ + apr_pool_destroy(jk_apr_pool); + laddr.s_addr = jk_inet_addr(remote_ipaddr); #else /* HAVE_APR */ On 12.05.2009 13:04, Henri Gomez wrote: > FYI. > > If I comment the apr_pool_clear() call, I didn't get the initialisation error > > 2009/5/12 Henri Gomez : >> Hi to all, >> >> I rebuild the mod_jk 1.2.28 on our i5/OS and Apache instance failed. >> >> Here is the stack trace : >> >> 00000009:259448 Stack: Library / Program Module Stmt >> Procedure >> 00000009:259488 Stack: QSYS / QCMD 455 : >> 00000009:259520 Stack: QHTTPSVR / QZHBMAIN ZHBMAIN 0 : >> _CXX_PEP__Fv >> 00000009:259552 Stack: QHTTPSVR / QZHBMAIN ZHBMAIN 18 : >> main >> 00000009:259576 Stack: QHTTPSVR / QZHBMAIN ZHBMAIN 234 : >> BigSwitch__FiPPc >> 00000009:259608 Stack: QHTTPSVR / QZSRHTTP QZSRMAIN 0 : >> _CXX_PEP__Fv >> 00000009:259640 Stack: QHTTPSVR / QZSRHTTP QZSRMAIN 2 : >> main >> 00000009:267440 Stack: QHTTPSVR / QZSRCORE MAIN 868 : >> apache_main >> 00000009:287992 Stack: QHTTPSVR / QZSRCORE HTTP_CONFI 5 : >> ap_run_post_config >> 00000009:288288 Stack: QHTTPSVR / MOD_JK1228 MOD_JK 60 : >> jk_post_config >> 00000009:288320 Stack: QHTTPSVR / MOD_JK1228 MOD_JK 35 : >> init_jk >> 00000009:288688 Stack: QHTTPSVR / MOD_JK1228 JK_WORKER 34 : >> wc_open >> 00000009:288720 Stack: QHTTPSVR / MOD_JK1228 JK_WORKER 9 : >> build_worker_map >> 00000009:296848 Stack: QHTTPSVR / MOD_JK1228 JK_WORKER 28 : >> wc_create_worker >> 00000009:298192 Stack: QHTTPSVR / MOD_JK1228 JK_AJP13_W 5 : >> validate >> 00000009:298208 Stack: QHTTPSVR / MOD_JK1228 JK_AJP_COM 29 : >> ajp_validate >> 00000009:298216 Stack: QHTTPSVR / MOD_JK1228 JK_CONNECT 19 : >> jk_resolve >> 00000009:316840 Stack: QHTTPSVR / QZSRAPR APR_POOLS 13 : >> apr_pool_clear >> 00000009:316864 Stack: QHTTPSVR / QZSRAPR APR_POOLS 8 : >> allocator_free >> 00000009:316880 Stack: QHTTPSVR / QZSRCORE MAIN 18 : >> Main_Excp_Handler >> 00000009:316888 Stack: QHTTPSVR / QZSRAPR OS400TRACE 7 : >> apr_dstack_CCSID >> 00000009:326912 Stack: QSYS / QP0ZCPA QP0ZUDBG 3 : >> Qp0zDumpStack >> 00000009:346808 Stack: QSYS / QP0ZSCPA QP0ZSDBG 2 : >> Qp0zSUDumpStack >> 00000009:346824 Stack: QSYS / QP0ZSCPA QP0ZSDBG 12 : >> Qp0zSUDumpTargetStack >> 00000009:346824 Stack: Completed >> 00000009:407280 apr_dump_trace(): dump for job >> 678302/QTMHHTTP/DAPSERVER >> TRCTCPAPP Output >> >> The problem appears in jk_resolve just after apr_pool_create. >> >> What happen if 2 threads goes in jk_resolve at the same time ? >> >> if (!jk_apr_pool) { >> if (apr_pool_create(&jk_apr_pool, (apr_pool_t *)pool) != >> APR_SUCCESS) { >> JK_TRACE_EXIT(l); >> return JK_FALSE; >> } >> } >> apr_pool_clear(jk_apr_pool); >> if (apr_sockaddr_info_get >> (&remote_sa, host, APR_UNSPEC, (apr_port_t) port, 0, jk_apr_pool) >> != APR_SUCCESS) { >> JK_TRACE_EXIT(l); >> return JK_FALSE; >> } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org