Bug with localtime_r()?

Rich Neswold rich.neswold@REDACTED
Wed Jun 15 14:10:54 CEST 2005


Hello,

I'm running R10B-5 on my NetBSD 2.0.2 system. I noticed that
erlang:localtime() was returning UTC time. It turns out that
'configure' detects localtime_r() on my system and uses it. However,
on NetBSD, the man page says:

     "localtime_r() does not imply initialization of the local time conversion
     information; the application may need to do so by calling tzset(3)."

Looking through the BEAM source, I couldn't find any reference to
tzset(3) so I added it to the emulator initialization. The man page
didn't seem to imply that each thread needed to call it, so I didn't
try to put tzset() in the process initialization code.

I rebuilt my OTP installation using the following patch, and now the
localtime functions work:

--- erts/emulator/sys/unix/sys.c.orig   2005-06-14 23:25:38.000000000 -0500
+++ erts/emulator/sys/unix/sys.c        2005-06-14 23:28:11.000000000 -0500
@@ -33,6 +33,10 @@
 #include <ctype.h>
 #include <sys/utsname.h>
 
+#ifdef HAVE_LOCALTIME_R
+#include <time.h>
+#endif
+
 #if !defined(USE_SELECT)
 
 #  ifdef HAVE_POLL_H
@@ -428,6 +432,9 @@
     if (isatty(0)) {
        tcgetattr(0,&initial_tty_mode);
     }
+#ifdef HAVE_LOCALTIME_R
+    tzset();
+#endif
 }

-- 
Rich

AIM : rnezzy
ICQ : 174908475



More information about the erlang-patches mailing list