|
@@ -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:
|