Constructor and Destructor of a singleton object called twice

Posted by Bikram990 on Server Fault See other posts from Server Fault or by Bikram990
Published on 2012-11-08T10:57:32Z Indexed on 2012/11/08 11:06 UTC
Read the original article Hit count: 158

Filed under:
|
|

I'm facing a problem in singleton object in c++. Here is the explanation:

Problem info: I have a 4 shared libraries (say libA.so, libB.so, libC.so, libD.so) and 2 executable binary files each using one another shared library( say libE.so) which deals with files.

The purpose of libE.so is to write data into a file and if the executable restarts or size of file exceeds a certain limit it is zipped and a new file is created with time stamp in name. It is using singleton object. It exports a handler class for getting and using singleton. Compressing only happens in the above said two cases. The user/loader executable can specify the starting name of file only no other control is provided by handler class.

libA.so, libB.so, libC.so and libD.so have almost same behavior. They all have a class and declare and object of an handler which gets the instance of the singleton in libE.so and uses it for further purpose.

All these libraries are linked to two executable binary files. If only one of the two executable runs then its fine, But if both executable runs one after other then the file of the first started executable gets compressed.

Debug info: The constructor and destructor of the singleton object is called twice.(for each executable)

The object of singleton is a static object and never deleted.

The executable is not able to exit/return gives:

  • glibc detected * (exe1 or exe2): double free or corruption (!prev): some_addr *

Running with binaries valgrind gives that the above error is due to the destructor of the singleton object.

Thanks

© Server Fault or respective owner

Related posts about linux

Related posts about c++