short deinitialize()
	{
// Before killing this thread, check if the thread is STILL alive
		if(!t.isAlive())
			MsgAnalyzerCmnDef.WriteDebugSyslog("The worker thread in the SerialReceiver object did NOT exist......");
		else
		{
			exit.set(true);
			MsgAnalyzerCmnDef.WriteDebugSyslog("The worker thread in the SerialReceiver object is STILL alive");
			t.interrupt();
			try 
			{
// wait till this thread dies
				t.join(2000);
				// System.out.println("The worker thread of receiving serial data is dead");
				MsgAnalyzerCmnDef.WriteDebugSyslog("The worker thread of receving serial data is dead");
			}
			catch (InterruptedException e)
			{
				MsgAnalyzerCmnDef.WriteDebugSyslog("The receiving serial data worker thread throws a InterruptedException...");
			}
			catch(Exception e)
			{
				MsgAnalyzerCmnDef.WriteErrorSyslog("Error occur while waiting for death of receving serial data worker thread, due to: " + e.toString());
			}
		}
		device_handle_exist = false;

		short ret = MsgAnalyzerCmnDef.ANALYZER_SUCCESS;
// Close the serial port
		MsgAnalyzerCmnDef.WriteDebugSyslog("De-initialize the SerialPortWrapper object");
		ret = serial_port.close_serial();
		if (MsgAnalyzerCmnDef.CheckFailure(ret))
			return ret;

		return ret;
	}