From: | Andrew Chernow <ac(at)esilo(dot)com> |
---|---|
To: | Andrew Dunstan <andrew(at)dunslane(dot)net> |
Cc: | Rainer Bauer <usenet(at)munnin(dot)com>, pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: 8.3 .4 + Vista + MingW + initdb = ACCESS_DENIED |
Date: | 2008-10-17 14:12:34 |
Message-ID: | 48F89D52.5010002@esilo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
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/
From | Date | Subject | |
---|---|---|---|
Next Message | Simon Riggs | 2008-10-17 14:38:53 | Hot Standby: First integrated patch |
Previous Message | Tom Lane | 2008-10-17 12:46:11 | Re: Cross-column statistics revisited |