Re: [PATCHES] Compiling libpq with VisualC

From: pgsql(at)mohawksoft(dot)com
To: "Bruce Momjian" <pgman(at)candle(dot)pha(dot)pa(dot)us>
Cc: "Andreas Pflug" <pgadmin(at)pse-consulting(dot)de>, "PostgreSQL Win32 port list" <pgsql-hackers-win32(at)postgresql(dot)org>, "PostgreSQL-development" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: [PATCHES] Compiling libpq with VisualC
Date: 2004-06-13 23:17:49
Message-ID: 17038.24.91.171.78.1087168669.squirrel@mail.mohawksoft.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-hackers-win32 pgsql-patches

>
> [ Thread moved to hackers and win32.]
>
> Andreas Pflug wrote:
>> Bruce Momjian wrote:
>>
>> >
>> >
>> >Agreed. My pthread book says pthread_mutex_init() should be called
>> only
>> >once, and we have to guarantee that. If the Windows implentation
>> allows
>> >it to be called multiple times, just create a function to be called
>> only
>> >by Win32 that does that and leave the Unix safe.
>> >
>> >
>> >
>> Ok, so here's the win32 workaround with the unix stuff left untouched.
>> There's no memory interlocking api in win32 that wouldn't need some
>> initializing api call itself, so we'd have to go for assembly level
>> test-and-set code or introduce a mandatory global libpq initializing
>> api. Considering the probably quite low usage of kerberos/ssl together
>> with threads under win32, and the very low probability of two
>> threads/processors (!) trying to initiate a connection at the same time,
>> it doesn't seem to be worth the compiler hassle with assembly inline.
>
> What is the recommended way to create mutex objects (CreateMutex) from
> Win32 libraries? There must be a clean way like there is in pthreads.

A mutex is inherently a global object. CreateMutex(NULL, FALSE, NULL) will
return a handle to an unowned mutex.

>
> ---------------------------------------------------------------------------
>
> In the patch Win32, pthread_mutex_init() == CreateMutex():
>
> +#ifndef WIN32
> static pthread_mutex_t singlethread_lock =
> PTHREAD_MUTEX_INITIALIZER;
> +#else
> + static pthread_mutex_t singlethread_lock;
> + static int mutex_initialized = 0;
> + if (!mutex_initialized)
> + {
> + mutex_initialized = 1;
> + pthread_mutex_init(&singlethread_lock, NULL);
> + }
> +#endif
>
> --
> Bruce Momjian | http://candle.pha.pa.us
> pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
> + If your life is a hard drive, | 13 Roberts Road
> + Christ can be your backup. | Newtown Square, Pennsylvania
> 19073
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
> (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2004-06-13 23:22:35 Re: Can get GiST RECHECK clause to work
Previous Message pgsql 2004-06-13 23:08:20 Re: [pgsql-hackers-win32] Tablespaces

Browse pgsql-hackers-win32 by date

  From Date Subject
Next Message Bruce Momjian 2004-06-13 23:44:58 Re: pg_ctl vs. Windows locking
Previous Message pgsql 2004-06-13 23:08:20 Re: [pgsql-hackers-win32] Tablespaces

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2004-06-13 23:55:39 Re: [PATCHES] Configuration patch
Previous Message pgsql 2004-06-13 23:02:15 Re: [PATCHES] Configuration patch