Rind 9 месяцев назад
Родитель
Сommit
585231e9e1
6 измененных файлов с 31 добавлено и 2 удалено
  1. 1 1
      gfaipc.pro
  2. 1 0
      src/gfaipc.h
  3. 21 0
      src/ipcshm.cpp
  4. 6 1
      src/shm.cpp
  5. 1 0
      src/shm.h
  6. 1 0
      src/shmrot.cpp

+ 1 - 1
gfaipc.pro

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

+ 1 - 0
src/gfaipc.h

@@ -27,6 +27,7 @@ void	GfaIpcReleaseSHM	(HSHM hShm);
 void*	GfaIpcAcquirePointer(HSHM hShm);
 void	GfaIpcReleasePointer(HSHM hShm, const void *p);
 void	GfaIpcLockSHM		(HSHM hShm);
+int		GfaIpcTryLockSHM	(HSHM hShm);
 void	GfaIpcUnlockSHM		(HSHM hShm);
 int		GfaIpcLockSHMAndSigBlock	(HSHM hShm, sigset_t *pss);
 int		GfaIpcUnlockSHMAndSigUnblock(HSHM hShm, sigset_t *pss);

+ 21 - 0
src/ipcshm.cpp

@@ -207,6 +207,27 @@ void GfaIpcLockSHM(HSHM hShm)
 
 /////////////////////////////////////////////////////////////////////////////
 
+int GfaIpcTryLockSHM(HSHM hShm)
+{
+	if(!hShm)
+	{
+		TRACE("GfaIpcTryLockSHM: Invalid Handle!\n");
+		return 0;
+	}
+
+	LPSHM_HANDLE ph = (LPSHM_HANDLE)hShm;
+
+	if(!ph->pShm)
+	{
+		TRACE("GfaIpcTryLockSHM: Invalid Handle!\n");
+		return 0;
+	}
+
+	return ph->pShm->TryLock();
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
 void GfaIpcUnlockSHM(HSHM hShm)
 {
 	if(!hShm)

+ 6 - 1
src/shm.cpp

@@ -141,7 +141,7 @@ int CShm::Create(const uuid_t &ruuid, size_t nCbShm, const char *pszDir)
 long CShm::Release(void)
 {
 	long att = -1;
-	CShmLocker locker(m_mutex);
+//	CShmLocker locker(m_mutex);
 
 	if(_IS_VALID_SHMID(m_nShmID))
 	{
@@ -280,6 +280,11 @@ int CShm::Lock(void)
 	return m_mutex.Lock();
 }
 
+int CShm::TryLock(void)
+{
+	return m_mutex.TryLock();
+}
+
 int CShm::Unlock(void)
 {
 	return m_mutex.Unlock();

+ 1 - 0
src/shm.h

@@ -47,6 +47,7 @@ public:
 	int ShmInfo(struct shm_info *pinfo);
 
 	int Lock(void);
+	int TryLock(void);
 	int Unlock(void);
 	int LockAndSigBlock(sigset_t *pss);
 	int UnlockAndSigUnblock(sigset_t *pss);

+ 1 - 0
src/shmrot.cpp

@@ -297,6 +297,7 @@ void CShmROT::DumpEntries(CShmHandleMap &map)
 					re.szDescName,
 					re.nCntHandles,
 					nAttached);
+			fflush(stdout);
 		}
 	}