[prev in list] [next in list] [prev in thread] [next in thread] 

List:       berlin-cvs
Subject:    [Fresco-changes] Fresco/Prague/src/Sys Fork.cc,1.8,1.9 Signal.cc,1.11,1.12
From:       Tobias Hunger <tobias () fresco ! org>
Date:       2003-11-03 17:53:57
[Download RAW message or body]

Update of /cvs/fresco/Fresco/Prague/src/Sys
In directory purcel:/tmp/cvs-serv30820/Prague/src/Sys

Modified Files:
	Fork.cc Signal.cc 
Log Message:
Improve Signal class as proposed in bug280. Had to touch a couple of other
files, updating the signal names to their non-abbrevated versions this
patch introduces.


Index: Fork.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Prague/src/Sys/Fork.cc,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- Fork.cc	31 Oct 2003 22:33:13 -0000	1.8
+++ Fork.cc	3 Nov 2003 17:53:54 -0000	1.9
@@ -186,7 +186,7 @@
 bool  Fork::child() const { return process->pid == 0; }
 bool  Fork::parent() const { return process->pid > 0; }
 pid_t Fork::pid() const { return process->pid; }
-void  Fork::suicide_on_signal (int signo)
+void  Fork::suicide_on_signal (Signal::type signo)
 {
     if (!Signal::set(signo, &Process::suicide))
         std::perror ("Fork: Cannot commit suicide with the specified signal");

Index: Signal.cc
===================================================================
RCS file: /cvs/fresco/Fresco/Prague/src/Sys/Signal.cc,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- Signal.cc	31 Oct 2003 22:33:13 -0000	1.11
+++ Signal.cc	3 Nov 2003 17:53:54 -0000	1.12
@@ -38,20 +38,20 @@
        * the event handler that it is reentrant and async safe
        * - stefan
        */
-      if (signo == Signal::child) Signal::notify(signo);
+      if (signo == Signal::child) Signal::notify(Signal::type(signo));
       else if (!Thread::id())
-      Signal::queue.push(signo);
+      Signal::queue.push(Signal::type(Signal::type(signo)));
   }
 
 } // namespace
 
 using namespace Prague;
 
-Signal::dict_t     Signal::notifiers;
-Thread::Queue<int> Signal::queue(32);
-Thread             Signal::server(&Signal::run, 0);
+Signal::dict_t Signal::notifiers;
+Thread::Queue<Signal::type> Signal::queue(32);
+Thread Signal::server(&Signal::run, 0);
 
-bool Signal::set (int signum, Signal::Notifier *notifier)
+bool Signal::set(type signum, Signal::Notifier *notifier)
 {
     if (server.state() == Thread::READY) server.start();
     if (!notifiers[signum].size())
@@ -70,7 +70,7 @@
     return true;
 }
 
-bool Signal::unset (int signum, Signal::Notifier *notifier)
+bool Signal::unset(type signum, Signal::Notifier *notifier)
 {
     nlist_t::iterator i = find (notifiers[signum].begin(), notifiers[signum].end(), notifier);
     if (i != notifiers[signum].end())
@@ -82,89 +82,89 @@
     return false;
 }
 
-void Signal::unset (int signum)
+void Signal::unset(type signum)
 {
     notifiers[signum].erase(notifiers[signum].begin(), notifiers[signum].end());
     struct sigaction sa;
-    if (sigaction (signum, 0, &sa) == -1) return;
-    if (sa.sa_handler == sighnd_type (&sighandler))
+    if (sigaction(int(signum), 0, &sa) == -1) return;
+    if (sa.sa_handler == sighnd_type(&sighandler))
     {
-        sa.sa_handler = sighnd_type (SIG_DFL);
-        if (sigemptyset (&sa.sa_mask) == -1) return;
+        sa.sa_handler = sighnd_type(SIG_DFL);
+        if (sigemptyset(&sa.sa_mask) == -1) return;
         sa.sa_flags = 0;
-        if (sigaction (signum, &sa, 0) == -1) return;
+        if (sigaction(int(signum), &sa, 0) == -1) return;
     }
 }
 
-void Signal::mask (int signum)
+void Signal::mask(type signum)
 {
     sigset_t s;
-    if (sigemptyset (&s) == -1) return;
-    if (sigaddset (&s, signum) == -1) return;
-    if (sigprocmask (SIG_BLOCK, &s, 0) == -1) return;
+    if (sigemptyset(&s) == -1) return;
+    if (sigaddset(&s, int(signum)) == -1) return;
+    if (sigprocmask(SIG_BLOCK, &s, 0) == -1) return;
 }
 
-void Signal::mask (int siga, int sigb)
+void Signal::mask (type siga, type sigb)
 {
     struct sigaction sa;
-    if (sigaction (siga, 0, &sa) == -1) return;
-    if (sa.sa_handler != sighnd_type (&sighandler))
+    if (sigaction(int(siga), 0, &sa) == -1) return;
+    if (sa.sa_handler != sighnd_type(&sighandler))
     {
-        sa.sa_handler = sighnd_type (&sighandler);
-        if (sigemptyset (&sa.sa_mask) == -1) return;
+        sa.sa_handler = sighnd_type(&sighandler);
+        if (sigemptyset(&sa.sa_mask) == -1) return;
         sa.sa_flags = 0;
     }
-    if (sigaddset (&sa.sa_mask, sigb) == -1) return;
-    if (sigaction (siga, &sa, 0) == -1) return;
+    if (sigaddset(&sa.sa_mask, int(sigb)) == -1) return;
+    if (sigaction(int(siga), &sa, 0) == -1) return;
 }
 
-void Signal::unmask (int signum)
+void Signal::unmask(type signum)
 {
     sigset_t s;
-    if (sigemptyset (&s) == -1) return;
-    if (sigaddset (&s, signum) == -1) return;
-    if (sigprocmask (SIG_UNBLOCK, &s, 0) == -1) return;
+    if (sigemptyset(&s) == -1) return;
+    if (sigaddset(&s, int(signum)) == -1) return;
+    if (sigprocmask(SIG_UNBLOCK, &s, 0) == -1) return;
 }
 
-void Signal::unmask (int siga, int sigb)
+void Signal::unmask(type siga, type sigb)
 {
     struct sigaction sa;
-    if (sigaction (siga, 0, &sa) == -1) return;
-    if (sa.sa_handler != sighnd_type (&sighandler))
+    if (sigaction(int(siga), 0, &sa) == -1) return;
+    if (sa.sa_handler != sighnd_type(&sighandler))
     {
-        sa.sa_handler = sighnd_type (&sighandler);
-        if (sigemptyset (&sa.sa_mask) == -1) return;
+        sa.sa_handler = sighnd_type(&sighandler);
+        if (sigemptyset(&sa.sa_mask) == -1) return;
         sa.sa_flags = 0;
     }
-    else { if (sigdelset (&sa.sa_mask, sigb) == -1) return;}
-    if (sigaction (siga, &sa, 0) == -1) return;
+    else { if (sigdelset(&sa.sa_mask, int(sigb)) == -1) return;}
+    if (sigaction(int(siga), &sa, 0) == -1) return;
 }
 
-void Signal::sysresume (int signum, bool set)
+void Signal::sysresume(type signum, bool set)
 {
     struct sigaction sa;
-    if (sigaction (signum, 0, &sa) == -1) return;
-    if (sa.sa_handler != sighnd_type (&sighandler))
+    if (sigaction(int(signum), 0, &sa) == -1) return;
+    if (sa.sa_handler != sighnd_type(&sighandler))
     {
-        sa.sa_handler = sighnd_type (&sighandler);
-        if (sigemptyset (&sa.sa_mask) == -1) return;
+        sa.sa_handler = sighnd_type(&sighandler);
+        if (sigemptyset(&sa.sa_mask) == -1) return;
         sa.sa_flags = 0;
     }
-    if (sigaction (signum, &sa, 0) == -1) return;
+    if (sigaction(int(signum), &sa, 0) == -1) return;
 }
 
-sigset_t Signal::pending ()
+sigset_t Signal::pending()
 {
     sigset_t s;
-    if (sigemptyset (&s) == -1) return s;
-    if (sigpending (&s) == -1) return s;
+    if (sigemptyset(&s) == -1) return s;
+    if (sigpending(&s) == -1) return s;
     return s;
 }
 
-bool Signal::ispending (int signo)
+bool Signal::ispending(type signo)
 {
     sigset_t s = pending();
-    switch (sigismember (&s, signo))
+    switch (sigismember(&s, type(signo)))
     {
       case  1:
         return true;
@@ -177,16 +177,16 @@
     return false;
 }
 
-const char *Signal::name(int signum) { return strsignal(signum); }
+const char *Signal::name(type signum) { return strsignal(int(signum)); }
 
 struct execute
 {
-    execute(int s) : signum(s) { }
+    execute(Signal::type s) : signum(s) { }
     void operator () (Signal::Notifier *notifier) { notifier->notify(signum); }
-    int signum;
+    Signal::type signum;
 };
 
-void Signal::notify(int signum)
+void Signal::notify(type signum)
 {
     nlist_t tmp = notifiers[signum];
     execute e(signum);
@@ -197,7 +197,7 @@
 {
     while (true)
     {
-        int signo = Signal::queue.top();
+        type signo = Signal::queue.top();
         Signal::queue.pop();
         Signal::notify(signo);
         Thread::testcancel();


_______________________________________________
Fresco-changes mailing list
Fresco-changes@fresco.org
http://lists.fresco.org/cgi-bin/listinfo/fresco-changes
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic