Re: 8.3 .4 + Vista + MingW + initdb = ACCESS_DENIED

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/

In response to

Responses

Browse pgsql-hackers by date

  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