Hi,

Wondering if you can help us understand what's happening here. (Currently
testing under naviserver 4.99.5 with Tcl 8.5.11)

Our test case is the following proc:

proc clock_test {} {
    log Notice [clock format [clock scan now] -format "%Y-%m-%d %H:%M:%S"
-timezone :Tcl/Localtime]
    return true
}

If we open a naviserver control port and run the command it works:

> ns_schedule_proc -once  0 clock_test
[04/Jul/2013:16:17:49][2278.7f08c0bf5700][-sched-] Notice: 2013-07-04
16:37:49

However, if we now run any ns_eval and repeat, the clock command will fail:

> ns_eval expr {2+1}
3
> ns_schedule_proc -once  0 clock_test
[04/Jul/2013:16:25:17][2278.7f08c0b73700][-sched-] Error: time zone
":Tcl/Localtime" not found

We can see why this is failing. It's because, after the ns_eval, namespace
eval clock is called from Tcl's init script. This means the next call to
the clock ensemble will run clock::Initialize again. This resets the TZData
array (removing :Tcl:Localtime) but :Tcl/Localtime is still cached in the
::tcl::clock::CachedSystemTimeZone variable... hence the error.

If we now run the proc in its own thread, it will work again until another
ns_eval is performed.

> ns_schedule_proc -once -thread 0 clock_test
[04/Jul/2013:16:46:06][18122.7f2c93f53700][-sched:7-] Notice: 2013-07-04
16:46:06
> ns_eval expr {2+2}
> ns_schedule_proc -once -thread 0 clock_test
[04/Jul/2013:16:46:15][18122.7f2c93f53700][-sched:8-] Error: time zone
":Tcl/Localtime" not found

It's a bit of a contrived test case but believe it or not, we are
encountering basically the same situation in production.

If ::tcl::clock::ClearCaches were to be called before the second
::tcl::clock::Initialize
I think everything would be fine. But would be interested to hear opinions
on why this is manifesting itself in these situations.

Regards,
-- 
David
------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
naviserver-devel mailing list
naviserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/naviserver-devel

Reply via email to