///////////////////////////////////////////////////////////////////////////////
// LameXP - Audio Encoder Front-End
-// Copyright (C) 2004-2012 LoRd_MuldeR <MuldeR2@GMX.de>
+// Copyright (C) 2004-2013 LoRd_MuldeR <MuldeR2@GMX.de>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
/*
* Static vars
*/
-quint64 AbstractTool::m_lastLaunchTime = 0ui64;
-QMutex *AbstractTool::m_mutex_startProcess = NULL;
-HANDLE AbstractTool::m_handle_jobObject = NULL;
-unsigned int AbstractTool::m_jobObjRefCount = 0U;
+quint64 AbstractTool::s_lastLaunchTime = 0ui64;
+QMutex AbstractTool::s_mutex_startProcess;
+HANDLE AbstractTool::s_handle_jobObject = NULL;
+unsigned int AbstractTool::s_jobObjRefCount = 0U;
/*
* Const
static CreateJobObjectFun CreateJobObjectPtr = NULL;
static SetInformationJobObjectFun SetInformationJobObjectPtr = NULL;
- if(!m_mutex_startProcess)
- {
- m_mutex_startProcess = new QMutex();
- }
+ QMutexLocker lock(&s_mutex_startProcess);
- QMutexLocker lock(m_mutex_startProcess);
-
- if(m_jobObjRefCount < 1U)
+ if(s_jobObjRefCount < 1U)
{
- if(!CreateJobObjectPtr || !SetInformationJobObjectPtr)
+ const lamexp_os_version_t *osVersionNo = lamexp_get_os_version();
+ if(LAMEXP_MIN_OS_VER(osVersionNo, 5, 1))
{
- QLibrary Kernel32Lib("kernel32.dll");
- CreateJobObjectPtr = (CreateJobObjectFun) Kernel32Lib.resolve("CreateJobObjectA");
- SetInformationJobObjectPtr = (SetInformationJobObjectFun) Kernel32Lib.resolve("SetInformationJobObject");
+ if((!CreateJobObjectPtr) || (!SetInformationJobObjectPtr))
+ {
+ QLibrary Kernel32Lib("kernel32.dll");
+ CreateJobObjectPtr = (CreateJobObjectFun) Kernel32Lib.resolve("CreateJobObjectA");
+ SetInformationJobObjectPtr = (SetInformationJobObjectFun) Kernel32Lib.resolve("SetInformationJobObject");
+ }
}
if(CreateJobObjectPtr && SetInformationJobObjectPtr)
{
jobExtendedLimitInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE | JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION;
if(SetInformationJobObjectPtr(jobObject, JobObjectExtendedLimitInformation, &jobExtendedLimitInfo, sizeof(JOBOBJECT_EXTENDED_LIMIT_INFORMATION)))
{
- m_handle_jobObject = jobObject;
- m_jobObjRefCount = 1U;
+ s_handle_jobObject = jobObject;
+ s_jobObjRefCount = 1U;
}
else
{
CloseHandle(jobObject);
}
}
+ else
+ {
+ qWarning("Failed to create the job object!");
+ }
}
}
else
{
- m_jobObjRefCount++;
+ s_jobObjRefCount++;
}
m_firstLaunch = true;
*/
AbstractTool::~AbstractTool(void)
{
- QMutexLocker lock(m_mutex_startProcess);
+ QMutexLocker lock(&s_mutex_startProcess);
- if(m_jobObjRefCount >= 1U)
+ if(s_jobObjRefCount >= 1U)
{
- m_jobObjRefCount--;
- if((m_jobObjRefCount < 1U) && m_handle_jobObject)
+ s_jobObjRefCount--;
+ if((s_jobObjRefCount < 1U) && s_handle_jobObject)
{
- CloseHandle(m_handle_jobObject);
- m_handle_jobObject = NULL;
+ CloseHandle(s_handle_jobObject);
+ s_handle_jobObject = NULL;
}
}
}
{
static AssignProcessToJobObjectFun AssignProcessToJobObjectPtr = NULL;
- QMutexLocker lock(m_mutex_startProcess);
+ QMutexLocker lock(&s_mutex_startProcess);
- if(currentTime() <= m_lastLaunchTime)
+ if(currentTime() <= s_lastLaunchTime)
{
Sleep(START_DELAY);
}
if(process.waitForStarted())
{
- if(AssignProcessToJobObjectPtr && m_handle_jobObject)
+ if(AssignProcessToJobObjectPtr && s_handle_jobObject)
{
- if(!AssignProcessToJobObjectPtr(m_handle_jobObject, process.pid()->hProcess))
+ if(!AssignProcessToJobObjectPtr(s_handle_jobObject, process.pid()->hProcess))
{
qWarning("Failed to assign process to job object!");
}
m_firstLaunch = false;
}
- m_lastLaunchTime = currentTime() + START_DELAY_NANO;
+ s_lastLaunchTime = currentTime() + START_DELAY_NANO;
return true;
}
process.kill();
process.waitForFinished(-1);
- m_lastLaunchTime = currentTime() + START_DELAY_NANO;
+ s_lastLaunchTime = currentTime() + START_DELAY_NANO;
return false;
}