{
if (m_Db->GetAvailableCount() == 0)
{
+ CUpdateDatabaseMutex lock;
m_Db->RemoveCached();
m_Db->UpdateAvailable();
}
break;
case ID_RESETDB:
+ {
+ CUpdateDatabaseMutex lock;
m_Db->RemoveCached();
UpdateApplicationsList(SelectedEnumType, bReload);
break;
+ }
case ID_HELP:
MessageBoxW(L"Help not implemented yet", NULL, MB_OK);
template <class T> class CLocalPtr : public CHeapPtr<T, CLocalAllocator>
{
};
+
+struct CScopedMutex
+{
+ HANDLE m_hMutex;
+
+ CScopedMutex(LPCWSTR Name, UINT Timeout = INFINITE, BOOL InitialOwner = FALSE)
+ {
+ m_hMutex = CreateMutexW(NULL, InitialOwner, Name);
+ if (m_hMutex && !InitialOwner)
+ {
+ DWORD wait = WaitForSingleObject(m_hMutex, Timeout);
+ if (wait != WAIT_OBJECT_0 && wait != WAIT_ABANDONED)
+ {
+ CloseHandle(m_hMutex);
+ m_hMutex = NULL;
+ }
+ }
+ }
+ ~CScopedMutex()
+ {
+ if (m_hMutex)
+ {
+ ReleaseMutex(m_hMutex);
+ CloseHandle(m_hMutex);
+ }
+ }
+
+ bool Acquired() const { return m_hMutex != NULL; }
+};
#define WM_NOTIFY_OPERATIONCOMPLETED (WM_APP + 0)
+#define MAINWINDOWCLASSNAME L"ROSAPPMGR2"
+#define MAINWINDOWMUTEX szWindowClass
+#define UPDATEDBMUTEX ( MAINWINDOWCLASSNAME L":UpDB" )
+
+struct CUpdateDatabaseMutex : public CScopedMutex
+{
+ CUpdateDatabaseMutex() : CScopedMutex(UPDATEDBMUTEX, 1000 * 60 * 10, FALSE) { };
+};
+
#endif /* _RAPPS_H */
BOOL bAppwizMode = (argc > 1 && MatchCmdOption(argv[1], CMD_KEY_APPWIZ));
if (!bAppwizMode)
{
+ CUpdateDatabaseMutex lock;
if (SettingsInfo.bUpdateAtStart || bIsFirstLaunch)
db.RemoveCached();
{
// Check whether the RAPPS MainWindow is already launched in another process
CStringW szWindowText(MAKEINTRESOURCEW(bAppwizMode ? IDS_APPWIZ_TITLE : IDS_APPTITLE));
- LPCWSTR pszMutex = bAppwizMode ? L"RAPPWIZ" : szWindowClass;
+ LPCWSTR pszMutex = bAppwizMode ? L"RAPPWIZ" : MAINWINDOWMUTEX;
HANDLE hMutex = CreateMutexW(NULL, FALSE, pszMutex);
if ((!hMutex) || (GetLastError() == ERROR_ALREADY_EXISTS))
#include <gdiplus.h>
#include <conutils.h>
-LPCWSTR szWindowClass = L"ROSAPPMGR2";
+LPCWSTR szWindowClass = MAINWINDOWCLASSNAME;
LONG g_Busy = 0;
HWND hMainWnd;