diff --git a/lib/GeneralServer/GeneralListenTask.h b/lib/GeneralServer/GeneralListenTask.h index b754ebfbd0..65000a4310 100644 --- a/lib/GeneralServer/GeneralListenTask.h +++ b/lib/GeneralServer/GeneralListenTask.h @@ -44,23 +44,7 @@ namespace triagens { GeneralListenTask& operator= (GeneralListenTask const&); public: -/* - //////////////////////////////////////////////////////////////////////////////// - /// @brief listen to given address and port - //////////////////////////////////////////////////////////////////////////////// - GeneralListenTask (S* server, string const& address, int port, bool reuseAddress) - : Task("GeneralListenTask"), ListenTask(address, port, reuseAddress), server(server) { - } - - //////////////////////////////////////////////////////////////////////////////// - /// @brief listen to given port - //////////////////////////////////////////////////////////////////////////////// - - GeneralListenTask (S* server, int port, bool reuseAddress) - : Task("GeneralListenTask"), ListenTask(port, reuseAddress), server(server) { - } -*/ //////////////////////////////////////////////////////////////////////////////// /// @brief listen to given port //////////////////////////////////////////////////////////////////////////////// diff --git a/lib/Scheduler/ApplicationScheduler.cpp b/lib/Scheduler/ApplicationScheduler.cpp index e85e91b566..9c6fe1b868 100644 --- a/lib/Scheduler/ApplicationScheduler.cpp +++ b/lib/Scheduler/ApplicationScheduler.cpp @@ -403,6 +403,8 @@ void ApplicationScheduler::shutdown () { sleep(1); } + _scheduler->shutdown(); + // delete the scheduler delete _scheduler; _scheduler = 0; diff --git a/lib/Scheduler/ListenTask.cpp b/lib/Scheduler/ListenTask.cpp index 6c8faf3f69..f2993bb57a 100644 --- a/lib/Scheduler/ListenTask.cpp +++ b/lib/Scheduler/ListenTask.cpp @@ -98,6 +98,10 @@ ListenTask::~ListenTask () { if (listenSocket != -1) { close(listenSocket); } + + if (readWatcher != 0) { + scheduler->uninstallEvent(readWatcher); + } } // ----------------------------------------------------------------------------- diff --git a/lib/Scheduler/PeriodicTask.cpp b/lib/Scheduler/PeriodicTask.cpp index 7d5f856097..d10819b54f 100644 --- a/lib/Scheduler/PeriodicTask.cpp +++ b/lib/Scheduler/PeriodicTask.cpp @@ -46,6 +46,9 @@ PeriodicTask::PeriodicTask (double offset, double intervall) PeriodicTask::~PeriodicTask () { + if (watcher != 0) { + scheduler->uninstallEvent(watcher); + } } // ----------------------------------------------------------------------------- diff --git a/lib/Scheduler/Scheduler.cpp b/lib/Scheduler/Scheduler.cpp index 0d43b27994..c142cbf842 100644 --- a/lib/Scheduler/Scheduler.cpp +++ b/lib/Scheduler/Scheduler.cpp @@ -209,6 +209,22 @@ bool Scheduler::isShutdownInProgress () { return stopping != 0; } +//////////////////////////////////////////////////////////////////////////////// +/// @brief shuts down the scheduler +//////////////////////////////////////////////////////////////////////////////// + +void Scheduler::shutdown () { + for (set::iterator i = taskRegistered.begin(); + i != taskRegistered.end(); + ++i) { + deleteTask(*i); + } + + taskRegistered.clear(); + task2thread.clear(); + current.clear(); +} + //////////////////////////////////////////////////////////////////////////////// /// @brief registers a new task //////////////////////////////////////////////////////////////////////////////// @@ -263,6 +279,8 @@ void Scheduler::unregisterTask (Task* task) { taskRegistered.erase(task); --current[task->getName()]; } + + task2thread.erase(i); } } diff --git a/lib/Scheduler/Scheduler.h b/lib/Scheduler/Scheduler.h index bccccfeeec..22927c0f7a 100644 --- a/lib/Scheduler/Scheduler.h +++ b/lib/Scheduler/Scheduler.h @@ -155,6 +155,12 @@ namespace triagens { bool isShutdownInProgress (); +//////////////////////////////////////////////////////////////////////////////// +/// @brief shuts down the scheduler +//////////////////////////////////////////////////////////////////////////////// + + void shutdown (); + //////////////////////////////////////////////////////////////////////////////// /// @brief registers a new task //////////////////////////////////////////////////////////////////////////////// diff --git a/lib/valgrind.supp b/lib/valgrind.supp new file mode 100644 index 0000000000..f42999a456 --- /dev/null +++ b/lib/valgrind.supp @@ -0,0 +1,8 @@ +{ + ignore errors caused by realloc(PTR,0) + Memcheck:Leak + fun:malloc + fun:realloc + fun:ev_realloc + ... +}