Commit 9dad00ec authored by sigbjorn's avatar sigbjorn Committed by Davis E. King

Provide cleanup for timer_global_clock singleton, issue #505 (#512)

* temporary workaround for python hanging on dlib::shared_ptr_thread_safe<global_clock> when extension-module using dlib is unloaded on windows platform

* added some more doc and tests for the new delete_global_clock function. Minor adjustment to singleton pattern to allow easy access to singleton shared ptr

* alternate _WIN32 specific solution, with no extra functions nor user-actions needed

* removed floating/obsolete delete_global_clock, tab to space

* leaving linux code unchanged in static desctructor

* cleanup not modified files

* align formatting
parent c1bc27c5
......@@ -24,11 +24,38 @@ namespace dlib
timer_global_clock::
~timer_global_clock()
{
// The only time this destructor is called is when
//
// a) the process terminates
// b) the dynamic library(.so/.dll) is unloaded (could be a part of a))
//
// in case of a)
// windows: the process termination is especially painful, since threads are killed
// before destructors of the process image .dll's are called.
// Thus, for the windows platform, there is no threads running, so the only thing
// to do here is just let the standard memberwise destructors run
// linux: it's ok to just signal shutdown and wait for the running thread, to exit
//
// in case of b)
// windows:
// if it's part of the termination process, a) applies
// if its part of user doing manual load_library/unload_library
// there is no (safe/robust)solution, but best practices are described here
// https://msdn.microsoft.com/en-us/library/windows/desktop/dn633971.aspx
// to support such a clean shutdown, you are required to make a call prior to
// unload dll, that shutdown all the threads in the contained dll.
// This could be done in this module by providing a global_delete_clock()
//
// linux: the destructor for linux will do it's usual job regardless.
//
#ifndef _WIN32
m.lock();
shutdown = true;
s.signal();
m.unlock();
wait();
#endif
}
// ----------------------------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment