diff options
author | Rodrigo Kumpera <kumpera@gmail.com> | 2015-12-03 18:36:10 +0300 |
---|---|---|
committer | Rodrigo Kumpera <kumpera@gmail.com> | 2015-12-03 18:36:10 +0300 |
commit | c2ac08b8ad576a8a111af19424cd7b2edacc2cb7 (patch) | |
tree | 6ff178eb21250659333a4e06c0419663cd007c10 /mcs/class/Mono.Posix | |
parent | 43b65b6775e1d85a23ce58065b56c542ca4af357 (diff) | |
parent | bca3964c8bb21bc5d991b6720b44a074c5590e24 (diff) |
Merge pull request #2260 from xmcclure/fix-testwaitany
Cleanup and crash fix around UnixSignal.WaitAny (bug #36214)
Diffstat (limited to 'mcs/class/Mono.Posix')
-rw-r--r-- | mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs | 6 | ||||
-rw-r--r-- | mcs/class/Mono.Posix/Test/Mono.Unix/UnixSignalTest.cs | 3 |
2 files changed, 7 insertions, 2 deletions
diff --git a/mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs b/mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs index fe1f8beba8e..8e4eb5b8463 100644 --- a/mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs +++ b/mcs/class/Mono.Posix/Mono.Unix/UnixSignal.cs @@ -150,10 +150,12 @@ namespace Mono.Unix { set {Interlocked.Exchange (ref Info->count, value);} } + // signum, count, write_fd, pipecnt, and pipelock are read from a signal handler thread + // count and pipelock are both read and written from the signal handler thread [Map] struct SignalInfo { - public int signum, count, read_fd, write_fd, have_handler, pipecnt; - public IntPtr handler; + public int signum, count, read_fd, write_fd, pipecnt, pipelock, have_handler; + public IntPtr handler; // Backed-up handler to restore when signal unregistered } #region WaitHandle overrides diff --git a/mcs/class/Mono.Posix/Test/Mono.Unix/UnixSignalTest.cs b/mcs/class/Mono.Posix/Test/Mono.Unix/UnixSignalTest.cs index 14613104d9b..d621ad51d45 100644 --- a/mcs/class/Mono.Posix/Test/Mono.Unix/UnixSignalTest.cs +++ b/mcs/class/Mono.Posix/Test/Mono.Unix/UnixSignalTest.cs @@ -456,6 +456,7 @@ namespace MonoTests.Mono.Unix { s.Close (); } + // Create thread that issues many signals from a set of harmless signals static Thread CreateRaiseStormThread (int max) { return new Thread (delegate () { @@ -486,6 +487,7 @@ namespace MonoTests.Mono.Unix { CloseSignals (usignals); } + // Create thread that repeatedly registers then unregisters signal handlers static Thread CreateSignalCreatorThread () { return new Thread (delegate () { @@ -523,6 +525,7 @@ namespace MonoTests.Mono.Unix { CloseSignals (usignals); } + // Create thread that blocks until at least one of the given signals is received static Thread CreateWaitAnyThread (params UnixSignal[] usignals) { return new Thread (delegate () { |