diff options
| author | Bosko Milekic <bmilekic@FreeBSD.org> | 2001-03-08 19:21:45 +0000 |
|---|---|---|
| committer | Bosko Milekic <bmilekic@FreeBSD.org> | 2001-03-08 19:21:45 +0000 |
| commit | 4bde2ac53905fc0ca6f3a8bff5abb6e85dcdb50c (patch) | |
| tree | 135573d083e56758d6d9c5909bbd2b9f4c8d3832 /sys | |
| parent | bfef7ed45cbdee30b500a702fd7b02c530d8c7df (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/kern/uipc_syscalls.c | 13 |
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); } |
