once.c is no longer POSIX specific. Since it is now considerably more advanced than it used to be, use it on windows, too

git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1841 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2007-09-17 13:50:13 +00:00
parent 7f9fea74ef
commit 19eb7ebd4d
4 changed files with 3 additions and 75 deletions

View file

@ -77,15 +77,11 @@ endif
if OS_IS_WIN32 if OS_IS_WIN32
PA_THREAD_OBJS = \ PA_THREAD_OBJS = \
pulsecore/once-win32.c pulsecore/once.h \
pulsecore/mutex-win32.c pulsecore/mutex.h \ pulsecore/mutex-win32.c pulsecore/mutex.h \
pulsecore/thread-win32.c pulsecore/thread.h \ pulsecore/thread-win32.c pulsecore/thread.h \
pulsecore/semaphore.h pulsecore/semaphore-win32.c pulsecore/semaphore.h
#pulsecore/semaphore-win32.c pulsecore/semaphore.h
else else
PA_THREAD_OBJS = \ PA_THREAD_OBJS = \
pulsecore/atomic.h \
pulsecore/once-posix.c pulsecore/once.h \
pulsecore/mutex-posix.c pulsecore/mutex.h \ pulsecore/mutex-posix.c pulsecore/mutex.h \
pulsecore/thread-posix.c pulsecore/thread.h \ pulsecore/thread-posix.c pulsecore/thread.h \
pulsecore/semaphore-posix.c pulsecore/semaphore.h pulsecore/semaphore-posix.c pulsecore/semaphore.h
@ -496,6 +492,7 @@ libpulse_la_SOURCES += \
pulsecore/flist.c pulsecore/flist.h \ pulsecore/flist.c pulsecore/flist.h \
pulsecore/object.c pulsecore/object.h \ pulsecore/object.c pulsecore/object.h \
pulsecore/msgobject.c pulsecore/msgobject.h \ pulsecore/msgobject.c pulsecore/msgobject.h \
pulsecore/once.c pulsecore/once.h \
$(PA_THREAD_OBJS) $(PA_THREAD_OBJS)
if OS_IS_WIN32 if OS_IS_WIN32
@ -706,6 +703,7 @@ libpulsecore_la_SOURCES += \
pulsecore/rtpoll.c pulsecore/rtpoll.h \ pulsecore/rtpoll.c pulsecore/rtpoll.h \
pulsecore/rtclock.c pulsecore/rtclock.h \ pulsecore/rtclock.c pulsecore/rtclock.h \
pulsecore/macro.h \ pulsecore/macro.h \
pulsecore/once.c pulsecore/once.h \
$(PA_THREAD_OBJS) $(PA_THREAD_OBJS)
if OS_IS_WIN32 if OS_IS_WIN32

View file

@ -320,7 +320,6 @@ int main(int argc, char *argv[]) {
int daemon_pipe[2] = { -1, -1 }; int daemon_pipe[2] = { -1, -1 };
int suid_root, real_root; int suid_root, real_root;
int valid_pid_file = 0; int valid_pid_file = 0;
gid_t gid = (gid_t) -1; gid_t gid = (gid_t) -1;
#ifdef OS_IS_WIN32 #ifdef OS_IS_WIN32

View file

@ -1,69 +0,0 @@
/* $Id$ */
/***
This file is part of PulseAudio.
Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
PulseAudio is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
PulseAudio is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with PulseAudio; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA.
***/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <assert.h>
#include <stdio.h>
#include <windows.h>
#include <pulsecore/mutex.h>
#include "once.h"
void pa_once(pa_once_t *control, pa_once_func_t func) {
HANDLE mutex;
char name[64];
assert(control);
assert(func);
/* Create the global mutex */
sprintf(name, "pulse%d", (int)GetCurrentProcessId());
mutex = CreateMutex(NULL, FALSE, name);
assert(mutex);
/* Create the local mutex */
WaitForSingleObject(mutex, INFINITE);
if (!control->mutex)
control->mutex = pa_mutex_new(1);
ReleaseMutex(mutex);
CloseHandle(mutex);
/* Execute function */
pa_mutex_lock(control->mutex);
if (!control->once_value) {
control->once_value = 1;
func();
}
pa_mutex_unlock(control->mutex);
/* Caveat: We have to make sure that the once func has completed
* before returning, even if the once func is not actually
* executed by us. Hence the awkward locking. */
}