summaryrefslogtreecommitdiff
path: root/libdiskfs/disk-pager.c
diff options
context:
space:
mode:
authorMichael I. Bushnell <mib@gnu.org>1996-06-24 20:41:40 +0000
committerMichael I. Bushnell <mib@gnu.org>1996-06-24 20:41:40 +0000
commit65bd7b600ee9dd5b4c9a7d2777c330148508c5a6 (patch)
treee5d3bfaefb5f2dda292d33894a2d71963b1c93eb /libdiskfs/disk-pager.c
parent86917d47bf56eae9a002deedb2b57f8a095970f8 (diff)
(disk_pager_setup):
Diffstat (limited to 'libdiskfs/disk-pager.c')
-rw-r--r--libdiskfs/disk-pager.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libdiskfs/disk-pager.c b/libdiskfs/disk-pager.c
index 5446c7bf..9ae2a2a5 100644
--- a/libdiskfs/disk-pager.c
+++ b/libdiskfs/disk-pager.c
@@ -27,7 +27,11 @@ extern struct port_bucket *pager_bucket;
static void fault_handler (int sig, long int sigcode, struct sigcontext *scp);
static struct hurd_signal_preempter preempter =
- { preempter: NULL, handler: (sighandler_t) &fault_handler, };
+ {
+ signals: sigmask (SIGSEGV) | sigmask (SIGBUS),
+ preempter: NULL,
+ handler: (sighandler_t) &fault_handler,
+ };
/* A top-level function for the paging thread that just services paging
@@ -92,6 +96,9 @@ fault_handler (int sig, long int sigcode, struct sigcontext *scp)
assert (env && "unexpected fault on disk image");
+ /* Clear the record, since the faulting thread will not. */
+ cthread_set_data (cthread_self (), 0);
+
/* Fetch the error code from the pager. */
assert (scp->sc_error == EKERN_MEMORY_ERROR);
err = pager_get_error (disk_pager, sigcode);