X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8907154c1a8a6882c6797d1f16393ddfb23e7f3a..bb996f289574defb0ae4339ae8e46ff3cf6fa54c:/src/unix/snglinst.cpp?ds=inline diff --git a/src/unix/snglinst.cpp b/src/unix/snglinst.cpp index bdd773a19e..ef2f83ac95 100644 --- a/src/unix/snglinst.cpp +++ b/src/unix/snglinst.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: unix/snglinst.cpp +// Name: src/unix/snglinst.cpp // Purpose: implements wxSingleInstanceChecker class for Unix using // lock files with fcntl(2) or flock(2) // Author: Vadim Zeitlin @@ -7,7 +7,7 @@ // Created: 09.06.01 // RCS-ID: $Id$ // Copyright: (c) 2001 Vadim Zeitlin -// License: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -31,10 +31,10 @@ #include "wx/string.h" #include "wx/log.h" #include "wx/intl.h" + #include "wx/utils.h" // wxGetHomeDir() #endif //WX_PRECOMP #include "wx/file.h" -#include "wx/utils.h" // wxGetHomeDir() #include "wx/snglinst.h" @@ -183,7 +183,7 @@ LockResult wxSingleInstanceCheckerImpl::CreateLockFile() m_nameLock.c_str()); Unlock(); - + return LOCK_ERROR; } @@ -226,11 +226,11 @@ bool wxSingleInstanceCheckerImpl::Create(const wxString& name) case LOCK_CREATED: // nothing more to do - return TRUE; + return true; case LOCK_ERROR: // oops... - return FALSE; + return false; } // Check if the file is owned by current user and has 0600 permissions. @@ -269,7 +269,7 @@ bool wxSingleInstanceCheckerImpl::Create(const wxString& name) // rarely in practice that we don't care wxLogError(_("Failed to access lock file.")); - return FALSE; + return false; } char buf[256]; @@ -289,7 +289,7 @@ bool wxSingleInstanceCheckerImpl::Create(const wxString& name) wxLogError(_("Failed to remove stale lock file '%s'."), name.c_str()); - // return TRUE in this case for now... + // return true in this case for now... } else { @@ -308,7 +308,7 @@ bool wxSingleInstanceCheckerImpl::Create(const wxString& name) } } - // return TRUE if we could get the PID of the process owning the lock file + // return true if we could get the PID of the process owning the lock file // (whether it is still running or not), FALSE otherwise as it is // unexpected return m_pidLocker != 0; @@ -348,10 +348,10 @@ bool wxSingleInstanceChecker::Create(const wxString& name, const wxString& path) { wxASSERT_MSG( !m_impl, - _T("calling wxSingleInstanceChecker::Create() twice?") ); + wxT("calling wxSingleInstanceChecker::Create() twice?") ); // must have the file name to create a lock file - wxASSERT_MSG( !name.empty(), _T("lock file name can't be empty") ); + wxASSERT_MSG( !name.empty(), wxT("lock file name can't be empty") ); m_impl = new wxSingleInstanceCheckerImpl; @@ -361,9 +361,9 @@ bool wxSingleInstanceChecker::Create(const wxString& name, fullname = wxGetHomeDir(); } - if ( fullname.Last() != _T('/') ) + if ( fullname.Last() != wxT('/') ) { - fullname += _T('/'); + fullname += wxT('/'); } fullname << name; @@ -371,13 +371,23 @@ bool wxSingleInstanceChecker::Create(const wxString& name, return m_impl->Create(fullname); } -bool wxSingleInstanceChecker::IsAnotherRunning() const +bool wxSingleInstanceChecker::DoIsAnotherRunning() const { - wxCHECK_MSG( m_impl, FALSE, _T("must call Create() first") ); + wxCHECK_MSG( m_impl, false, wxT("must call Create() first") ); + + const pid_t lockerPid = m_impl->GetLockerPID(); + + if ( !lockerPid ) + { + // we failed to open the lock file, return false as we're definitely + // not sure that another our process is running and so it's better not + // to prevent this one from starting up + return false; + } // if another instance is running, it must own the lock file - otherwise // we have it and the locker PID is ours one - return m_impl->GetLockerPID() != getpid(); + return lockerPid != getpid(); } wxSingleInstanceChecker::~wxSingleInstanceChecker() @@ -386,4 +396,3 @@ wxSingleInstanceChecker::~wxSingleInstanceChecker() } #endif // wxUSE_SNGLINST_CHECKER -