From: Christian P. <cp...@us...> - 2005-04-23 17:57:34
|
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 |