Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@gmail.com>2015-12-03 18:36:10 +0300
committerRodrigo Kumpera <kumpera@gmail.com>2015-12-03 18:36:10 +0300
commitc2ac08b8ad576a8a111af19424cd7b2edacc2cb7 (patch)
tree6ff178eb21250659333a4e06c0419663cd007c10 /mcs/class/Mono.Posix
parent43b65b6775e1d85a23ce58065b56c542ca4af357 (diff)
parentbca3964c8bb21bc5d991b6720b44a074c5590e24 (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.cs6
-rw-r--r--mcs/class/Mono.Posix/Test/Mono.Unix/UnixSignalTest.cs3
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 () {