public short deinitialize()
	{
		short ret = MsgDumperCmnDef.MSG_DUMPER_SUCCESS;
		if (t.isAlive())
		{
			try
			{
// If the user does NOT notify the thread to die, notify it before waiting for its death
				if (!exit.get())
				{
					ret = notify_to_deinitialize();
					if (MsgDumperCmnDef.CheckMsgDumperFailure(ret))
					{
						MsgDumperCmnDef.WriteErrorFormatSyslog(__FILE__(), __LINE__(), "Fail to notify to de-initialize the MsgDumper%s object", msg_dumper.get_facility_name());
						return ret;
					}
				}

				t.join(3000);
				String debug_msg = "The thread is dead";
				MsgDumperCmnDef.WriteDebugSyslog(__FILE__(), __LINE__(), debug_msg);
				if (!silent_mode)
					System.out.println("The thread is dead");
			}
			catch (InterruptedException e)
			{
				String warn_msg = "Error occur while waiting for thread's death: " + e.toString();
				MsgDumperCmnDef.WriteWarnSyslog(__FILE__(), __LINE__(), warn_msg);
				if (!silent_mode)
					System.out.println(warn_msg);
			}
			catch(Exception e)
			{
				String errmsg = "Error: " + e.toString();
				MsgDumperCmnDef.WriteErrorSyslog(__FILE__(), __LINE__(), errmsg);
				if (!silent_mode)
					System.out.println(errmsg);
			}
			
		}

// De-initialize the msg_dumper object
		ret = msg_dumper.deinitialize();
		if (MsgDumperCmnDef.CheckMsgDumperFailure(ret))
		{
			MsgDumperCmnDef.WriteErrorFormatSyslog(__FILE__(), __LINE__(), "Fail to de-initialize the MsgDumper%s object", msg_dumper.get_facility_name());
			return ret;
		}

		return MsgDumperCmnDef.MSG_DUMPER_SUCCESS;
	}