diff options
Diffstat (limited to 'libdiskfs/disk-pager.c')
-rw-r--r-- | libdiskfs/disk-pager.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libdiskfs/disk-pager.c b/libdiskfs/disk-pager.c index 7af0e3ba..886ce157 100644 --- a/libdiskfs/disk-pager.c +++ b/libdiskfs/disk-pager.c @@ -84,6 +84,7 @@ diskfs_start_disk_pager (struct user_pager_info *upi, static void fault_handler (int sig, long int sigcode, struct sigcontext *scp) { + jmp_buf *env; error_t err; #ifndef NDEBUG @@ -102,8 +103,10 @@ fault_handler (int sig, long int sigcode, struct sigcontext *scp) } #endif + env = &diskfs_exception_diu->env; + /* Clear the record, since the faulting thread will not. */ - diskfs_exception_diu = NULL; + diskfs_exception_diu = diskfs_exception_diu->next; /* Fetch the error code from the pager. */ assert_backtrace (scp->sc_error == EKERN_MEMORY_ERROR); @@ -111,5 +114,5 @@ fault_handler (int sig, long int sigcode, struct sigcontext *scp) assert_backtrace (err); /* Make `diskfault_catch' return the error code. */ - longjmp (diskfs_exception_diu->env, err); + longjmp (*env, err); } |