-/****h* silcutil/silcmutex.h
- *
- * NAME
- *
- * silcmutex.h
- *
- * COPYRIGHT
- *
- * Author: Pekka Riikonen <priikone@silcnet.org>
- *
- * Copyright (C) 2001 Pekka Riikonen
- *
- * This program 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 of the License, or
- * (at your option) any later version.
- *
- * This program 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.
+/*
+
+ silcmutex.h
+
+ Author: Pekka Riikonen <priikone@silcnet.org>
+
+ Copyright (C) 2001 - 2005 Pekka Riikonen
+
+ This program 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; version 2 of the License.
+
+ This program 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.
+
+*/
+
+/****h* silcutil/SILC Mutex Interface
*
* DESCRIPTION
*
* Interface for the SILC Mutex locking implementation. This is platform
- * independent mutual exclusion interface for applications that need
+ * independent mutual exclusion interface for applications that need
* concurrency control.
*
- */
+ ***/
#ifndef SILCMUTEX_H
#define SILCMUTEX_H
-/* Prototypes */
-
/****s* silcutil/SilcMutexAPI/SilcMutex
*
* NAME
- *
+ *
* typedef struct SilcMutexStruct *SilcMutex;
*
* DESCRIPTION
***/
typedef struct SilcMutexStruct *SilcMutex;
+/****d* silcutil/SilcMutexAPI/SILC_MUTEX_DEFINE
+ *
+ * NAME
+ *
+ * #define SILC_MUTEX_DEFINE(name) ...
+ *
+ * DESCRIPTION
+ *
+ * This macro is used to define new mutex. Use this macro in an
+ * environment that can be compiled with or without the SILC Mutex
+ * API. This is equivalent to defining SilcMutex `name'; directly.
+ *
+ * SOURCE
+ */
+#define SILC_MUTEX_DEFINE(name) SilcMutex name
+/***/
+
/****f* silcutil/SilcMutexAPI/silc_mutex_alloc
*
* SYNOPSIS
*
- * SilcMutex silc_mutex_alloc(void);
+ * bool silc_mutex_alloc(SilcMutex *mutex);
*
* DESCRIPTION
*
* Allocates SILC Mutex object. The mutex object must be allocated
* before it can be used. It is freed by the silc_mutex_free function.
+ * This returns TRUE and allocated mutex in to the `mutex' and FALSE
+ * on error.
*
***/
-SilcMutex silc_mutex_alloc(void);
+bool silc_mutex_alloc(SilcMutex *mutex);
/****f* silcutil/SilcMutexAPI/silc_mutex_free
*
*
* DESCRIPTION
*
- * Free SILC Mutex object and frees all allocated memory.
+ * Free SILC Mutex object and frees all allocated memory. If `mutex'
+ * is NULL this function has no effect.
*
***/
void silc_mutex_free(SilcMutex mutex);
*
* Locks the mutex. If the mutex is locked by another thread the
* current thread will block until the other thread has issued
- * silc_mutex_unlock for the mutex.
+ * silc_mutex_unlock for the mutex. If `mutex' is NULL this function
+ * has no effect.
*
* NOTES
*
* DESCRIPTION
*
* Unlocks the mutex and thus releases it for another thread that
- * may be waiting for the lock.
+ * may be waiting for the lock. If `mutex' is NULL this function
+ * has no effect.
*
* NOTES
*