X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2FDaemon%2FDaemon.ih;h=bd29a9b88bf17ec0e310c49a1b1a8d299fcac333;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=0cc5c17faff70b450220ee42cf76eaafe709edbe;hpb=40fa3e3f1e0f639c68bd15bf469e35045f94abee;p=senf.git diff --git a/Utils/Daemon/Daemon.ih b/Utils/Daemon/Daemon.ih index 0cc5c17..bd29a9b 100644 --- a/Utils/Daemon/Daemon.ih +++ b/Utils/Daemon/Daemon.ih @@ -23,15 +23,17 @@ /** \file \brief Daemon internal header */ -#ifndef IH_Daemon_ -#define IH_Daemon_ 1 +#ifndef IH_SENF_Utils_Daemon_Daemon_ +#define IH_SENF_Utils_Daemon_Daemon_ 1 // Custom includes #include -#include +#include "../boost/intrusive/iset.hpp" +#include "../boost/intrusive/iset_hook.hpp" #include #include #include "../../Scheduler/Scheduler.hh" +#include "../../Scheduler/SignalEvent.hh" ///////////////////////////////ih.p//////////////////////////////////////// @@ -62,23 +64,37 @@ namespace detail { private: + // This is awkward ... we'll need to erase an element from the target list given + // only the target object. This is best implement using an intrusive container. + // However, this makes memory-management explicit and we'll need to be careful. typedef std::deque Buffer; - struct Target + struct TargetListTag; + typedef boost::intrusive::ilist_base_hook TargetListBase; + + struct Target : public TargetListBase { + Target(Forwarder & fwd, int fd); + int fd; Buffer::size_type offset; + scheduler::FdEvent writeevent; + }; + typedef boost::intrusive::ilist,false> Targets; + + struct DestroyDelete + { + template + void operator()(T * t) { delete t; } }; - typedef std::list Targets; void readData(int event); - void writeData(int event, Targets::iterator target); + void writeData(int event, Target * target); Buffer buffer_; int src_; - Targets targets_; - Callback cb_; + scheduler::FdEvent readevent_; }; void pipeClosed(int id); @@ -93,6 +109,8 @@ namespace detail { int stderr_; bool sigChld_; + scheduler::SignalEvent cldSignal_; + scheduler::TimerEvent timer_; Forwarder coutForwarder_; Forwarder cerrForwarder_; };