]> granicus.if.org Git - zfs/commit
Additional pthread related fixes for ztest
authorBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 Jun 2010 06:45:08 +0000 (23:45 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 Jun 2010 17:06:09 +0000 (10:06 -0700)
commit6fe1e37a5e9399eb24947e7b37ca7f3e276d8466
treedcba2c9ad30e945c6be98a9847ceeba70b57f635
parenta2e73b751657526c49af0e0598e656df0f877a1f
Additional pthread related fixes for ztest

There are 3 fixes in thie commit.  First, update ztest_run() to store
the thread id and not the address of the kthread_t.  This will be freed
on thread exit and is not safe to use.  This is pretty close to how
things were done in the original ztest code before I got there.

Second, for extra paranoia update thread_exit() to return a special
TS_MAGIC value via pthread_exit().  This value is then verified in
pthread_join() to ensure the thread exited cleanly.  This can be
done cleanly because the kthread doesn't provide a return code
mechanism we need to worry about.

Third, replace the ztest deadman thread with a signal handler.  We
cannot use the previous approach because the correct behavior for
pthreads is to wait for all threads to exit before terminating the
process.  Since the deadman thread won't call exit by design we
end up hanging in kernel_exit().  To avoid this we just setup a
SIGALRM signal handle and register a deadman alarm.  IMHO this
is simpler and cleaner anyway.
cmd/ztest/ztest.c
lib/libzpool/include/sys/zfs_context.h
lib/libzpool/kernel.c