https://issues.apache.org/bugzilla/show_bug.cgi?id=55153

--- Comment #6 from Harald Oehlmann <[email protected]> ---
I am sorry, Moassimo, but the patch does not change anything for me:

a) the issue is not cured
b) if I look via "ps -L aux" to the thread configuration, this did not change:

ps -L aux
USER       PID   LWP %CPU NLWP %MEM    VSZ   RSS TTY      STAT START   TIME
COMMAND
root     19610 19610  0.1    2  1.4 393540 14692 ?        Ssl  13:13   0:00
/usr/sbin/httpd
root     19610 19613  0.0    2  1.4 393540 14692 ?        Ssl  13:13   0:00
/usr/sbin/httpd
apache   19612 19612  0.0    1  0.7 391476  7292 ?        S    13:13   0:00
/usr/sbin/httpd
apache   19614 19614  0.0    1  1.0 393960 10432 ?        S    13:13   0:00
/usr/sbin/httpd

Thus, the notifier thread still runs one in the root process and not in the
worker threads.

I have looked a bit, where the thread creation function "Tcl_InitNotifier" is
called.

It eaven has a stub entry:
tclStubInit.c: Tcl_InitNotifier, /* 307 */

Here is the general call:
generic\tclNotify.c: procedure: TclInitNotifier()
which is called by the procedure in the same file : TclInitSubsystems()

This is called by by all of those:
tclBasic.c: Tcl_CreateInterp()
tclEncoding: Tcl_FindExecutable()

The patch proposed to call: Rivet_CreateTclInterp
which itself calls:
Tcl_FindExecutable()
and
Tcl_CreateInterp()

Thus the thread creation routine should be executed twice.

So I tried to first end the notifier for the case, that the count variable
"notifierCount" within Tcl_CreateNotifier() is already 1 which would cause that
no notifier is created:

Rivet_InitTclStuff(server_rec *s, apr_pool_t *p)
{
    rivet_server_conf *rsc = RIVET_SERVER_CONF( s->module_config );
    Tcl_FinalizeNotifier(NULL);
    Tcl_Interp *interp = Rivet_CreateTclInterp(s);
...

This removed also the one nothifier thread owned by root but does not create
one owned by apache used:
In the upper ps -L aux, it removes LWP 19613

I also tried to add an explicite "Tcl_CreateNotifier():

Rivet_InitTclStuff(server_rec *s, apr_pool_t *p)
{
    rivet_server_conf *rsc = RIVET_SERVER_CONF( s->module_config );
    Tcl_FinalizeNotifier(NULL);
    Tcl_Interp *interp = Rivet_CreateTclInterp(s);
    Tcl_InitNotifier();

but this does not help...

Sorry,
Harald

-- 
You are receiving this mail because:
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to