X-Git-Url: http://git.indexdata.com/?p=idzebra-moved-to-github.git;a=blobdiff_plain;f=include%2Fzebra-lock.h;h=407c359f2bb6dc251178881384f37d8b9acbc3e5;hp=b7d61648de0462083d1803eb53e5b15e096878de;hb=ba0720e26f508ba3396e232d2f82037c0e701698;hpb=eb2b742588ce07fb4516bbca22c93b938b13e433 diff --git a/include/zebra-lock.h b/include/zebra-lock.h index b7d6164..407c359 100644 --- a/include/zebra-lock.h +++ b/include/zebra-lock.h @@ -1,8 +1,31 @@ +/* This file is part of the Zebra server. + Copyright (C) 1994-2011 Index Data + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra 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 General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +*/ + + #ifndef ZEBRA_LOCK_H #define ZEBRA_LOCK_H -#if HAVE_PTHREAD_H +#ifdef WIN32 +#include +#endif +#if YAZ_POSIX_THREADS #include #endif @@ -11,7 +34,16 @@ YAZ_BEGIN_CDECL typedef struct { +#ifdef WIN32 + CRITICAL_SECTION mutex; +#else +# if YAZ_POSIX_THREADS pthread_mutex_t mutex; +# else + int dummy; +# endif +#endif + int state; } Zebra_mutex; YAZ_EXPORT int zebra_mutex_init (Zebra_mutex *p); @@ -22,8 +54,10 @@ YAZ_EXPORT int zebra_mutex_unlock (Zebra_mutex *p); typedef struct { int readers_reading; int writers_writing; +#if YAZ_POSIX_THREADS pthread_mutex_t mutex; pthread_cond_t lock_free; +#endif } Zebra_lock_rdwr; YAZ_EXPORT int zebra_lock_rdwr_init (Zebra_lock_rdwr *p); @@ -33,5 +67,31 @@ YAZ_EXPORT int zebra_lock_rdwr_wlock (Zebra_lock_rdwr *p); YAZ_EXPORT int zebra_lock_rdwr_runlock (Zebra_lock_rdwr *p); YAZ_EXPORT int zebra_lock_rdwr_wunlock (Zebra_lock_rdwr *p); +typedef struct { +#if YAZ_POSIX_THREADS + pthread_mutex_t mutex; + pthread_cond_t cond; +#else + int dummy; +#endif +} Zebra_mutex_cond; + +YAZ_EXPORT int zebra_mutex_cond_init (Zebra_mutex_cond *p); +YAZ_EXPORT int zebra_mutex_cond_destroy (Zebra_mutex_cond *p); +YAZ_EXPORT int zebra_mutex_cond_lock (Zebra_mutex_cond *p); +YAZ_EXPORT int zebra_mutex_cond_unlock (Zebra_mutex_cond *p); +YAZ_EXPORT int zebra_mutex_cond_wait (Zebra_mutex_cond *p); +YAZ_EXPORT int zebra_mutex_cond_signal (Zebra_mutex_cond *p); + YAZ_END_CDECL + #endif +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +