Update of /cvsroot/pclasses/pclasses2/src/System
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv8142/src/System
Modified Files:
Process.posix.cpp
Log Message:
- Updated ProcessListener for new signal-handling code
Index: Process.posix.cpp
===================================================================
RCS file: /cvsroot/pclasses/pclasses2/src/System/Process.posix.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- Process.posix.cpp 22 Feb 2005 13:21:49 -0000 1.2
+++ Process.posix.cpp 23 Apr 2005 17:57:26 -0000 1.3
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2004 by Christian Prochnow *
+ * Copyright (C) 2004,2005 by Christian Prochnow, SecuLogiX GmbH *
* cp...@se... *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -22,6 +22,9 @@
#include "pclasses/System/Directory.h"
#include "pclasses/System/FileInfo.h"
#include "pclasses/System/File.h"
+#include "pclasses/System/CriticalSection.h"
+
+#include "../System/SignalListener.h"
#include <sys/types.h>
#include <sys/wait.h>
@@ -33,9 +36,6 @@
#include <string>
#include <list>
-#include "../System/FdListener.h"
-#include "../System/SignalListener.h"
-
namespace P {
namespace System {
@@ -45,11 +45,12 @@
ChildSignalHandler()
: SignalListener(SIGCHLD) { }
- void onSignal()
+ void onSignal(const sigval& sv)
{
ProcessListener* proc = 0;
int exitCode = 0;
+ CriticalSection::ScopedLock lck(_procsCs);
std::list<ProcessListener*>::iterator i = _procs.begin();
while(i != _procs.end())
{
@@ -68,11 +69,13 @@
void add(ProcessListener* proc)
{
+ CriticalSection::ScopedLock lck(_procsCs);
_procs.push_back(proc);
}
void remove(ProcessListener* proc)
{
+ CriticalSection::ScopedLock lck(_procsCs);
std::list<ProcessListener*>::iterator i = _procs.begin();
while(i != _procs.end())
{
@@ -99,6 +102,7 @@
}
private:
+ CriticalSection _procsCs;
std::list<ProcessListener*> _procs;
static ChildSignalHandler* _instance;
};
@@ -342,6 +346,11 @@
void ProcessListener::signaled(const Event& ev)
{
sigExited.fire(*this, ev.id());
+ exited(ev.id());
+}
+
+void ProcessListener::exited(int exitCode)
+{
}
} // !namespace System
|