diff --git a/examples/spamme.cpp b/examples/spamme.cpp index 9605dbe..171fbbb 100644 --- a/examples/spamme.cpp +++ b/examples/spamme.cpp @@ -10,6 +10,7 @@ #endif #include +#include #include #include @@ -45,7 +46,7 @@ struct SpamMonitor : public pva::Monitor, public std::tr1::enable_shared_from_this { const std::tr1::shared_ptr channel; - const pva::MonitorRequester::shared_pointer requester; + const requester_type::weak_pointer requester; pvd::int32 maxQueue; bool pipeline; // Has the client seen poll()==NULL @@ -170,9 +171,14 @@ struct SpamMonitor : public pva::Monitor, } signal &= !filled.empty(); + if(signal) + clientEmpty = false; + } + if(signal) { + requester_type::shared_pointer req(requester.lock()); + if(req) + req->monitorEvent(shared_from_this()); } - if(signal) - requester->monitorEvent(shared_from_this()); } }; @@ -182,7 +188,7 @@ struct SpamChannel : public pva::Channel, { const std::tr1::shared_ptr provider; const std::string name; - const pva::ChannelRequester::shared_pointer requester; + const pva::ChannelRequester::weak_pointer requester; SpamChannel(const std::tr1::shared_ptr& provider, const std::string& name, @@ -197,7 +203,7 @@ struct SpamChannel : public pva::Channel, virtual std::string getRemoteAddress() OVERRIDE FINAL {return "";} virtual ConnectionState getConnectionState() OVERRIDE FINAL {return CONNECTED;} - virtual std::tr1::shared_ptr getChannelRequester() OVERRIDE FINAL { return requester; } + virtual pva::ChannelRequester::shared_pointer getChannelRequester() OVERRIDE FINAL { return pva::ChannelRequester::shared_pointer(requester); } virtual void destroy() OVERRIDE FINAL {} @@ -290,6 +296,10 @@ int main(int argc, char *argv[]) { <