Andrew Dunstan wrote:

Has anyone considered not using a file lock on windows? CreateMutex might do the trick if provided a mutex name, making it global rather than process bound. OpenMutex can be used to test if the mutex exists or if it is currently locked. I guess it would stay locked. If there is a crash, it is automatically closed by the os.

The docs state the system closes the handle (mutex) when the process terminates and makes no mention of this being a lingering action like LockFileEx. It sounds like the mutex is closed ASAP when the process terminates, just like file handles.


Please review the previous discussion. This whole thing came about because of major problems in handling Global objects.

cheers

andrew



I did review it which is why I proposed global mutexes. No one spoke about mutexes. The conversation was about global sections, like file mappings. Global sections fall under a stricter security policy than global mutexes. I just ran the below code on Vista as a dumb-dumb non-administrative user (no SeCreateGlobalPrivilege) and it worked like a charm (compiled with VisualStudio.NET 2003 v7 13.10.3077). Maybe I am missing something?

// run the below from different consoles.  the first run will
// create the mutex and sleep for 10 seconds before destroying it.
// The other console will open the existing mutex.
#include <windows.h>
#include <stdio.h>

int main(int argc, char **argv)
{
  HANDLE h = CreateMutex(NULL, TRUE, "Global\\__postmaster__");

  if(h == NULL)
  {
    printf("CreateMutex: %u\n", GetLastError());
    return 1;
  }

  if(GetLastError() == ERROR_ALREADY_EXISTS)
  {
    printf("postmaster is running\n");
  }
  else
  {
    printf("postmaster mutex created and ownership aquired\n");
    Sleep(10000);
  }

  CloseHandle(h);
  return 0;
}

--
Andrew Chernow
eSilo, LLC
every bit counts
http://www.esilo.com/

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to