Posix signals in uthread context not vcore context
authorKevin Klues <klueska@cs.berkeley.edu>
Fri, 22 Aug 2014 18:12:45 +0000 (11:12 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Fri, 22 Aug 2014 18:12:45 +0000 (11:12 -0700)
commitd7119757ec7d0a8e5357afcf8444f33c3d9e076a
treed97be721f0a4d29319b1f7c4ccfbde4f748101bd
parenta75913fc65efa64ae9a24b17924ea23d45a6af62
Posix signals in uthread context not vcore context

This patch set makes is so that posix signals are run from uthread
context instead of vcore context when triggered from the pthread
library.

Whenever a pthread has a signal pending and it is about to be restarted,
a temprary signal context and stack is swapped in to run the signal
handlers for those pending signals, and the pthread is restored into
that context.  When the signal handlers have compelted, the original
context and stack are restored, and the pthread is rsumed.

A new 'sigdata' struct has been introduced to encapsulate the data
structures necessary to handle all this swapping back and forth.  These
'sigdata' structs are served as part of the parlib signal library, and
reused across different pthreads whenever they have a signal handler to
run. The rest of the changes live entirely in the pthread library,
though we may be able to move parts of it out to parlib once we
generalize it a bit more.
user/parlib/include/parlib.h
user/parlib/signal.c
user/pthread/pthread.c
user/pthread/pthread.h