/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2010 Index Data.
+ * Copyright (C) Index Data.
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
#define YAZ_MUTEX_H
#include <stddef.h>
+#include <time.h>
#include <yaz/yconfig.h>
YAZ_BEGIN_CDECL
/** \brief YAZ MUTEX opaque pointer */
typedef struct yaz_mutex *YAZ_MUTEX;
+/** \brief YAZ condition opaque pointer */
+typedef struct yaz_cond *YAZ_COND;
+
/** \brief create MUTEX
\param mutexp is pointer to MUTEX handle (*mutexp must be NULL)
-
+
It is important that *mutexp is NULL. If not, yaz_mutex_create will
not modify the handle (assumes it is already created!)
*/
This function should be called after a MUTEX is created but before
it is used for locking.
*/
+YAZ_EXPORT
void yaz_mutex_set_name(YAZ_MUTEX mutex, int log_level, const char *name);
+/** \brief creates condition variable
+ \param p reference to condition handle
+
+ Upon successful completion *p holds the condition handle; *p = 0
+ on error.
+*/
+YAZ_EXPORT void yaz_cond_create(YAZ_COND *p);
+
+/** \brief destroys condition variable
+ \param p reference to condition handle
+
+ Upon completion *p holds 0.
+*/
+YAZ_EXPORT
+void yaz_cond_destroy(YAZ_COND *p);
+
+struct timeval;
+
+/** \brief waits for condition
+ \param p condition variable handle
+ \param m mutex
+ \param abstime wait until this time; 0 for indefinite wait
+
+ Semantics like pthread_cond_wait.
+*/
+YAZ_EXPORT
+int yaz_cond_wait(YAZ_COND p, YAZ_MUTEX m, const struct timeval *abstime);
+
+/** \brief unblock one thread waiting for block
+ \param p condition variable handle
+*/
+YAZ_EXPORT
+int yaz_cond_signal(YAZ_COND p);
+
+/** \brief unblock all threads waiting for block
+ \param p condition variable handle
+*/
+YAZ_EXPORT
+int yaz_cond_broadcast(YAZ_COND p);
+
YAZ_END_CDECL
#endif