瀏覽代碼

ADC-Info für Systeme ohne Tiva.

Rind 1 年之前
父節點
當前提交
40f9d161b0
共有 5 個文件被更改,包括 29 次插入12 次删除
  1. 4 1
      README.md
  2. 1 1
      gfaipc.pro
  3. 4 4
      src/appctrl.cpp
  4. 18 6
      src/thread.cpp
  5. 2 0
      src/thread.h

+ 4 - 1
README.md

@@ -1,7 +1,7 @@
 ## libgfaipc  
 
 ***Version:***  
-libgfaipc.so.1.7.0  
+libgfaipc.so.1.8.0  
 
 ***SO-Name:***  
 libgfaipc.so.1
@@ -57,3 +57,6 @@ gfa/shm.h, gfa/mutex.h, gfa/sema.h, gfa/procmem.h, gfa/thread.h
 
 * **1.7.0**<br>
 	Funktion zum Updaten der Storage-Device-Infos im SysInfo-Prozess.
+
+* **1.8.0**<br>
+	ADC-Info für Systeme ohne Tiva. Bugfixes.

+ 1 - 1
gfaipc.pro

@@ -1,5 +1,5 @@
 TEMPLATE = lib
-VERSION = 1.7
+VERSION = 1.8
 CONFIG -= qt app_bundle
 CONFIG += c++11 shared thread
 

+ 4 - 4
src/appctrl.cpp

@@ -1427,8 +1427,8 @@ void CAppCtrl::Lock(void)
 {
 	if(m_hShm)
 	{
-		if(::GfaIpcInterlockedIncrement(m_hShm, &m_nLockCount) == 1)
-			(*m_pfnLockSHM)(m_hShm);
+//		if(::GfaIpcInterlockedIncrement(m_hShm, &m_nLockCount) == 1)
+		(*m_pfnLockSHM)(m_hShm);
 	}
 }
 
@@ -1436,8 +1436,8 @@ void CAppCtrl::Unlock(void)
 {
 	if(m_hShm)
 	{
-		if(::GfaIpcInterlockedDecrement(m_hShm, &m_nLockCount) == 0)
-			(*m_pfnUnlockSHM)(m_hShm);
+//		if(::GfaIpcInterlockedDecrement(m_hShm, &m_nLockCount) == 0)
+		(*m_pfnUnlockSHM)(m_hShm);
 	}
 }
 

+ 18 - 6
src/thread.cpp

@@ -12,7 +12,9 @@ CThread::CThread(void) : m_tID(0),	m_tCond(PTHREAD_COND_INITIALIZER),
 									m_vSigs(),
 									m_nCondSig(-1),
 									m_bSignaled(false),
-									m_bBlocked(false)									
+									m_bBlocked(false),
+									m_bDetached(false),
+									m_bJoined(false)
 {
 	::pthread_attr_init(&m_tAttr);
 	m_itp.pThis = this;
@@ -20,7 +22,7 @@ CThread::CThread(void) : m_tID(0),	m_tCond(PTHREAD_COND_INITIALIZER),
 
 CThread::~CThread(void)
 {
-	::pthread_detach(m_tID);
+	Detach();
 	::pthread_attr_destroy(&m_tAttr);
 	::pthread_cond_destroy(&m_tCond);
 	::pthread_mutex_destroy(&m_tMtxCond);
@@ -50,15 +52,25 @@ int CThread::Cancel(void)
 
 int CThread::Join(void **ppRetval)
 {
-    if(m_tID != 0)
-        return ::pthread_join(m_tID, ppRetval);
+    if((m_tID != 0) && ! m_bDetached && !m_bJoined)
+    {
+        int ret = ::pthread_join(m_tID, ppRetval);
+        if(!ret)
+	        m_bJoined = true;
+        return ret;
+	}
     return -1;
 }
 
 int CThread::Detach(void)
 {
-    if(m_tID != 0)
-        return ::pthread_detach(m_tID);
+    if((m_tID != 0) && ! m_bDetached && !m_bJoined)
+    {
+        int ret = ::pthread_detach(m_tID);
+        if(!ret)
+	        m_bDetached = true;
+        return ret;
+	}
     return -1;
 }
 

+ 2 - 0
src/thread.h

@@ -59,6 +59,8 @@ private:
 	int m_nCondSig;
 	bool m_bSignaled;
 	bool m_bBlocked;
+	bool m_bDetached;
+	bool m_bJoined;
 	INTTP m_itp;
 };