Rob Browning <r...@defaultvalue.org> writes:

> I'll look a bit more closely at your locking concern.  Unless there's
> something else going on, I completely agree that we don't want to exit
> without releasing the lock.

Assuming you don't see anything amiss, perhaps I'll include this:

diff --git a/libguile/posix.c b/libguile/posix.c
index 14fefe183..dc0bbea29 100644
--- a/libguile/posix.c
+++ b/libguile/posix.c
@@ -1059,7 +1059,8 @@ scm_i_c_ttyname (int fd)
   // scm_i_misc_mutex for thread safety.  In glibc 2.3.2 two threads
   // continuously calling ttyname will otherwise get an overwrite quite
   // easily.
-  scm_i_scm_pthread_mutex_lock (&scm_i_misc_mutex);
+  scm_dynwind_begin (0);
+  scm_i_dynwind_pthread_mutex_lock (&scm_i_misc_mutex);
   char *global_name;
   SCM_SYSCALL (global_name = ttyname (fd));
   err = errno;
@@ -1068,11 +1069,11 @@ scm_i_c_ttyname (int fd)
       // Not necessary if ttyname() must also respect TTY_NAME_MAX.
       // POSIX ttyname description isn't completely clear.
       if (strlen (global_name) > TTY_NAME_MAX - 1)
         err = ERANGE;
       else
         strcpy(name, global_name);
     }
-  scm_i_pthread_mutex_unlock (&scm_i_misc_mutex);
+  scm_dynwind_end ();
 #endif // HAVE_TTYNAME
 
   if (err)

Thanks
-- 
Rob Browning
rlb @defaultvalue.org and @debian.org
GPG as of 2011-07-10 E6A9 DA3C C9FD 1FF8 C676 D2C4 C0F0 39E9 ED1B 597A
GPG as of 2002-11-03 14DD 432F AE39 534D B592 F9A0 25C8 D377 8C7E 73A4

Reply via email to