aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorBosko Milekic <bmilekic@FreeBSD.org>2001-03-08 19:21:45 +0000
committerBosko Milekic <bmilekic@FreeBSD.org>2001-03-08 19:21:45 +0000
commit4bde2ac53905fc0ca6f3a8bff5abb6e85dcdb50c (patch)
tree135573d083e56758d6d9c5909bbd2b9f4c8d3832 /sys
parentbfef7ed45cbdee30b500a702fd7b02c530d8c7df (diff)
Notes
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/uipc_syscalls.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index d849b216e29fd..2526c6b94d85f 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1461,10 +1461,13 @@ sf_buf_alloc()
sf_buf_alloc_want++;
error = msleep(&sf_freelist, &sf_freelist.sf_lock, PVM|PCATCH,
"sfbufa", 0);
- if (error != 0) {
- sf_buf_alloc_want--;
+ sf_buf_alloc_want--;
+
+ /*
+ * If we got a signal, don't risk going back to sleep.
+ */
+ if (error)
break;
- }
}
SLIST_REMOVE_HEAD(&sf_freelist.sf_head, free_list);
mtx_unlock(&sf_freelist.sf_lock);
@@ -1499,10 +1502,8 @@ sf_buf_free(caddr_t addr, void *args)
sf->m = NULL;
mtx_lock(&sf_freelist.sf_lock);
SLIST_INSERT_HEAD(&sf_freelist.sf_head, sf, free_list);
- if (sf_buf_alloc_want) {
- sf_buf_alloc_want--;
+ if (sf_buf_alloc_want > 0)
wakeup_one(&sf_freelist);
- }
mtx_unlock(&sf_freelist.sf_lock);
}