guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: thread assert with 1.8.2


From: Ludovic Courtès
Subject: Re: thread assert with 1.8.2
Date: Thu, 04 Oct 2007 18:22:53 +0200
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.1 (gnu/linux)

Hi,

address@hidden (Ludovic Courtès) writes:

> But now, there's a similar issue in HEAD with `(ice-9 i18n)':
>
>   PASS: locale objects: make-locale (2 args)
>   PASS: locale objects: make-locale (2 args, list)
>   PASS: locale objects: make-locale (3 args)
>   guile: Error detected by libpthread: Unlocking unlocked mutex.
>   Detected by file "/n0/gdt/NetBSD-4/src/lib/libpthread/pthread_mutex.c", 
> line 363, function "pthread_mutex_unlock".
>
> Backtrace:
>
>   #0  0xbba68fff in kill () from /usr/lib/libc.so.12
>   #1  0xbb9dadb3 in pthread__errorfunc () from /usr/lib/libpthread.so.0
>   #2  0xbb9d93f8 in pthread_mutex_unlock () from /usr/lib/libpthread.so.0
>   #3  0xbb9cbaa0 in scm_make_locale (category_list=0x2, 
> locale_name=0x80d6870, base_locale=0x204) at ../../libguile/i18n.c:436

OK, got this one too, and also a similar problem in `nl-langinfo' (see
attached patch).

HEAD now seems to work like a charm on NetBSD/i386, though it still
cannot be compiled with `-Werror' (patches welcome!).

Thanks,
Ludovic.

--- orig/libguile/ChangeLog
+++ mod/libguile/ChangeLog
@@ -1,3 +1,13 @@
+2007-10-04  Ludovic Courtès  <address@hidden>
+
+       * i18n.c (scm_make_locale)[!USE_GNU_LOCALE_API]: Don't call
+       `leave_locale_section ()' on failure of
+       `enter_locale_section ()' since the mutex is not held and locale
+       settings are unchanged.
+       (scm_nl_langinfo)[!USE_GNU_LOCALE_API]: Use
+       `restore_locale_settings ()' instead of `leave_locale_section ()' 
+       since the mutex is not held.
+       
 2007-10-02  Ludovic Courtès  <address@hidden>
 
        * threads.c (on_thread_exit): Don't call `scm_leave_guile ()'


--- orig/libguile/i18n.c
+++ mod/libguile/i18n.c
@@ -685,12 +685,14 @@
     scm_t_locale_settings prev_locale;
 
     err = enter_locale_section (c_locale, &prev_locale);
-    leave_locale_section (&prev_locale);
 
     if (err)
       goto fail;
     else
-      SCM_NEWSMOB (locale, scm_tc16_locale_smob_type, c_locale);
+      {
+       leave_locale_section (&prev_locale);
+       SCM_NEWSMOB (locale, scm_tc16_locale_smob_type, c_locale);
+      }
   }
 
 #endif
@@ -1410,7 +1412,7 @@
        {
          c_result = nl_langinfo (c_item);
 
-         leave_locale_section (&lsec_prev_locale);
+         restore_locale_settings (&lsec_prev_locale);
          free_locale_settings (&lsec_prev_locale);
        }
 #endif




reply via email to

[Prev in Thread] Current Thread [Next in Thread]