[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