Explorar el Código

Kleine Änderungen.

Rind hace 4 años
padre
commit
81d314a012
Se han modificado 5 ficheros con 45 adiciones y 11 borrados
  1. 18 6
      gfasysinfo/src/stgdevinfo.cpp
  2. 1 0
      gfasysinfo/src/stgdevinfo.h
  3. 24 3
      src/appctrl.cpp
  4. 1 1
      src/appctrl.h
  5. 1 1
      src/ipcpriv.h

+ 18 - 6
gfasysinfo/src/stgdevinfo.cpp

@@ -635,7 +635,7 @@ static void _EnumStorageDevices(GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, MountMap &m
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 
-CStgDevInfo::CStgDevInfo(void) : m_bPaused(false)
+CStgDevInfo::CStgDevInfo(void) : m_bPaused(false), m_bStateTransition(false)
 {
 }
 
@@ -701,12 +701,12 @@ void* CStgDevInfo::ThreadRoutine(void *pParam)
 
 		while(bRun)
 		{
-			if(!m_bPaused)
+			if((nRet = WaitSignalTimeout(0, &nSig)) == ETIMEDOUT)
 			{
-				if((nRet = WaitSignalTimeout(0, &nSig)) == ETIMEDOUT)
-				{
-					_ClearMapChanges(sdm);
+				_ClearMapChanges(sdm);
 
+				if(!m_bPaused)
+				{
 					while(poll(pfd, 2, 500) > 0)
 					{
 						_UpdateMountMap(mm);
@@ -727,11 +727,19 @@ void* CStgDevInfo::ThreadRoutine(void *pParam)
 						}
 					}
 
-					if(_DeviceMapChanged(sdm))
+					if(_DeviceMapChanged(sdm) || m_bStateTransition)
 					{
+						if(m_bStateTransition)
+						{
+							_UpdateMountMap(mm);
+							memset(&sdm, 0, sizeof(sdm));
+							_EnumStorageDevices(sdm, mm, pUdev);
+						}
 						::GfaIpcAppCtrlUpdateStorageDeviceMap(pep->hAC, sdm);
 					}
 				}
+				
+				m_bStateTransition = false;
 			}
 			else if(!nRet) // signal received
 			{
@@ -744,9 +752,13 @@ void* CStgDevInfo::ThreadRoutine(void *pParam)
 				case S_Update:
 					break;
 				case S_Pause:
+					memset(&sdm, 0, sizeof(sdm));
+					::GfaIpcAppCtrlUpdateStorageDeviceMap(pep->hAC, sdm, true);
+					m_bStateTransition = !m_bPaused;
 					m_bPaused = true;
 					break;
 				case S_Resume:
+					m_bStateTransition = m_bPaused;
 					m_bPaused = false;
 					break;
 				case S_Terminate:

+ 1 - 0
gfasysinfo/src/stgdevinfo.h

@@ -38,6 +38,7 @@ protected:
 
 private:
 	bool m_bPaused;
+	bool m_bStateTransition;
 };
 
 /////////////////////////////////////////////////////////////////////////////

+ 24 - 3
src/appctrl.cpp

@@ -995,12 +995,33 @@ bool CAppCtrl::UpdateSysInfo(void)
 	return false;
 }
 
-bool CAppCtrl::UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm)
+bool CAppCtrl::UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset)
 {
 	APP_CTRL_SYSTEM &sys = m_pAppCtrl->sys;
 	unsigned int nPartChangeMask = sdm.nPartChangeMask;
 	CAppCtrlShmLocker locker(*this);
 
+	if(bReset)
+	{
+		for(int i = 0; i < (int)_countof(sys.sdm.disks); ++i)
+		{
+			GFA_SYSINFO_DISK &diskShm = sys.sdm.disks[i];
+			_DELETE_DISK(diskShm);
+			sys.nDiskMask &= ~(0x01 << i);
+		}
+
+		for(int i = 0; i < (int)_countof(sys.sdm.parts); ++i)
+		{
+			GFA_SYSINFO_PARTITION &partShm = sys.sdm.parts[i];
+			_DELETE_PARTITION(partShm);
+			sys.nPartMask &= ~(0x01 << i);
+			_DELETE_MOUNTPOINT(partShm);
+			sys.nMountMask &= ~i;
+		}
+		
+		return true;
+	}
+
 	while(nPartChangeMask)
 	{
 		int nPartIdx = ffsll(nPartChangeMask) - 1;
@@ -1585,11 +1606,11 @@ extern "C" bool GfaIpcAppCtrlUpdateSysInfo(HAPPCTRL hAC)
 	return false;
 }
 
-extern "C" bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm)
+extern "C" bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset)
 {
 	CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
 	if(p)
-		return p->UpdateStorageDeviceMap(sdm);
+		return p->UpdateStorageDeviceMap(sdm, bReset);
 	return false;
 }
 

+ 1 - 1
src/appctrl.h

@@ -149,7 +149,7 @@ public:
 	bool CreateSysInfo(void);
 	bool ReleaseSysInfo(void);
 	bool UpdateSysInfo(void);
-	bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm);
+	bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset);
 	bool UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb);
 
 	bool GetSysMem(LPGFA_APPCTRL_SYSMEM psm);

+ 1 - 1
src/ipcpriv.h

@@ -28,7 +28,7 @@ typedef const GFA_SYSINFO_STORAGE_DEVICE_MAP *LPCGFA_SYSINFO_STORAGE_DEVICE_MAP;
 bool GfaIpcAppCtrlCreateSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlReleaseSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlUpdateSysInfo(HAPPCTRL hAC);
-bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm);
+bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset = false);
 void GfaIpcForceReleaseMutex(void);
 bool GfaIpcAppCtrlUpdateDbInfo(HAPPCTRL hAC, const GFA_SYSINFO_DATABASE &sdb);
 bool GfaIpcAppCtrlTriggertHeartBeat(HAPPCTRL hAC);