Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src/sys/rump/librump/rumpkern

Module Name:    src
Committed By:   pooka
Date:           Wed Jan 12 12:51:21 UTC 2011

Modified Files:
        src/sys/rump/librump/rumpkern: locks.c lwproc.c rump.c sleepq.c

Log Message:
When the client and the rump kernel are the same host process, all
threads blocking in the kernel automatically exit when the process
exists.  However, for the sysproxy case this does not hold.
Typically it's ~harmless, but e.g. in the case of socket binding
following by poll it gets annoying.

Introduce sysproxy procexit, which wakes up all threads blocking
on a condition when a process's communication socket is closed.
The code is a little different from the regular kernel simply
because in a rump kernel l_mutex is not available at all times
(this is because scheduling happens on every kernel entry and exit,
and that path must be kept lockless for any reasonable performance).
Instead, use gating which makes sure all threads are either out of
the cv code or suspended in a well-known state.  Then, wake up the
threads and tell them to get the hell out of our galaxy.

To generate a diff of this commit:
cvs rdiff -u -r1.46 -r1.47 src/sys/rump/librump/rumpkern/locks.c
cvs rdiff -u -r1.8 -r1.9 src/sys/rump/librump/rumpkern/lwproc.c
cvs rdiff -u -r1.218 -r1.219 src/sys/rump/librump/rumpkern/rump.c
cvs rdiff -u -r1.10 -r1.11 src/sys/rump/librump/rumpkern/sleepq.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Home | Main Index | Thread Index | Old Index