1/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2/* dbus-threads-internal.h D-Bus thread primitives 3 * 4 * Copyright (C) 2002, 2005 Red Hat Inc. 5 * 6 * Licensed under the Academic Free License version 2.1 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23#ifndef DBUS_THREADS_INTERNAL_H 24#define DBUS_THREADS_INTERNAL_H 25 26#include <dbus/dbus-macros.h> 27#include <dbus/dbus-types.h> 28#include <dbus/dbus-threads.h> 29 30/** 31 * @addtogroup DBusThreadsInternals 32 * @{ 33 */ 34 35/** 36 * A mutex which is recursive if possible, else non-recursive. 37 * This is typically recursive, but that cannot be relied upon. 38 */ 39typedef struct DBusRMutex DBusRMutex; 40 41/** 42 * A mutex suitable for use with condition variables. 43 * This is typically non-recursive. 44 */ 45typedef struct DBusCMutex DBusCMutex; 46 47/** @} */ 48 49DBUS_BEGIN_DECLS 50 51void _dbus_rmutex_lock (DBusRMutex *mutex); 52void _dbus_rmutex_unlock (DBusRMutex *mutex); 53void _dbus_rmutex_new_at_location (DBusRMutex **location_p); 54void _dbus_rmutex_free_at_location (DBusRMutex **location_p); 55 56void _dbus_cmutex_lock (DBusCMutex *mutex); 57void _dbus_cmutex_unlock (DBusCMutex *mutex); 58void _dbus_cmutex_new_at_location (DBusCMutex **location_p); 59void _dbus_cmutex_free_at_location (DBusCMutex **location_p); 60 61DBusCondVar* _dbus_condvar_new (void); 62void _dbus_condvar_free (DBusCondVar *cond); 63void _dbus_condvar_wait (DBusCondVar *cond, 64 DBusCMutex *mutex); 65dbus_bool_t _dbus_condvar_wait_timeout (DBusCondVar *cond, 66 DBusCMutex *mutex, 67 int timeout_milliseconds); 68void _dbus_condvar_wake_one (DBusCondVar *cond); 69void _dbus_condvar_new_at_location (DBusCondVar **location_p); 70void _dbus_condvar_free_at_location (DBusCondVar **location_p); 71 72/* Private to threading implementations and dbus-threads.c */ 73 74DBusRMutex *_dbus_platform_rmutex_new (void); 75void _dbus_platform_rmutex_free (DBusRMutex *mutex); 76void _dbus_platform_rmutex_lock (DBusRMutex *mutex); 77void _dbus_platform_rmutex_unlock (DBusRMutex *mutex); 78 79DBusCMutex *_dbus_platform_cmutex_new (void); 80void _dbus_platform_cmutex_free (DBusCMutex *mutex); 81void _dbus_platform_cmutex_lock (DBusCMutex *mutex); 82void _dbus_platform_cmutex_unlock (DBusCMutex *mutex); 83 84DBusCondVar* _dbus_platform_condvar_new (void); 85void _dbus_platform_condvar_free (DBusCondVar *cond); 86void _dbus_platform_condvar_wait (DBusCondVar *cond, 87 DBusCMutex *mutex); 88dbus_bool_t _dbus_platform_condvar_wait_timeout (DBusCondVar *cond, 89 DBusCMutex *mutex, 90 int timeout_milliseconds); 91void _dbus_platform_condvar_wake_one (DBusCondVar *cond); 92 93DBUS_END_DECLS 94 95#endif /* DBUS_THREADS_INTERNAL_H */ 96