Rob Browning <r...@defaultvalue.org> writes: > If I get time, I might poke around a bit and see if the thing we've > attempted to fix here might be more widespread.
I suppose something like this might serve as a generalization: #define SCM_LOCKED_SYSCALL(lock, body) \ while(1) \ { \ scm_i_pthread_mutex_t *lock___ = (lock); \ scm_i_pthread_mutex_lock (lock___); \ errno = 0; \ { body; } \ int err___ = errno; \ scm_i_pthread_mutex_unlock (lock___); \ if (err___ != EINTR) \ break; \ scm_async_tick (); \ } Though a good, shorter name would be nice. Then we'd have: #ifdef HAVE_TTYNAME_R SCM_SYSCALL (err = ttyname_r (fd, name, TTY_NAME_MAX)); #else // HAVE_TTYNAME char *global_name = 0; SCM_LOCKED_SYSCALL(&scm_i_misc_mutex, global_name = ttyname (fd)); if (global_name) strcpy(name, global_name); #endif // HAVE_TTYNAME -- 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