summaryrefslogtreecommitdiffstats
path: root/mpi
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-10-27 06:45:56 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-10-27 06:45:56 -0700
commit0faa7cf4c73cc7c95488ed3055dd3c693dd341bc (patch)
treeb640255b695ead0854653f68add9a16d1506566a /mpi
parent9d02ab722536227d488a31f5d580bc41501a7f68 (diff)
downloadtxr-0faa7cf4c73cc7c95488ed3055dd3c693dd341bc.tar.gz
txr-0faa7cf4c73cc7c95488ed3055dd3c693dd341bc.tar.bz2
txr-0faa7cf4c73cc7c95488ed3055dd3c693dd341bc.zip
Reduce size of saved/restored signal masks.
On glibc, sigset_t has a ridiculous size: one kilobyte! The kernel doesn't access most of it in the sigprocmask call. Yet it blows up the size of our dynamic frames quite a lot. In this commit, we define a small_sigset_t type and use that instead. We convert to the bloated one when calling the library. * signal.c (sig_blocked_cache): Type changes to small_sigset_t. (sig_reload_cache): Retrieve signal mask with sigprocmask into a local variable, then copy a small portion from that to sig_blocked_cache. (small_sigfillset): New static function. (set_sig_handler): Local variables of sigset_t changed to small_sigset_t. (sig_mask): Arguments are pointers to small_sigset_t. Conversion to sigset_t done around the call to sigprocmask. * signal.h (copy_sigset): Inline funtion removed. (small_sigset_t): New struct type. (extended_jmp_buf): Member blocked changed to small_sigset_t. (extended_setjmp): Cast expression updated with small_sigset_t *. (extended_longjmp): Use assignment instead of copy_sigset. (sig_blocked_cache, sig_mask): Declarations updated.
Diffstat (limited to 'mpi')
0 files changed, 0 insertions, 0 deletions