rwlock.c revision 499b34cea04a46823d003d4c0520c8b03e8513cb
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * Copyright (C) 1998-2001 Internet Software Consortium.
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * Permission to use, copy, modify, and distribute this software for any
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * purpose with or without fee is hereby granted, provided that the above
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * copyright notice and this permission notice appear in all copies.
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews/* $Id: rwlock.c,v 1.27 2001/01/09 21:56:26 bwelling Exp $ */
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews#define VALID_RWLOCK(rwl) ISC_MAGIC_VALID(rwl, RWLOCK_MAGIC)
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews#include <stdio.h> /* Required for fprintf/stderr. */
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews#include <isc/thread.h> /* Requried for isc_thread_self(). */
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrewsprint_lock(const char *operation, isc_rwlock_t *rwl, isc_rwlocktype_t type) {
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews "rwlock %p thread %lu %s(%s): %s, %u active, "
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews "%u granted, %u rwaiting, %u wwaiting\n"),
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews rwl->active, rwl->granted, rwl->readers_waiting,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrewsisc_rwlock_init(isc_rwlock_t *rwl, unsigned int read_quota,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * In case there's trouble initializing, we zero magic now. If all
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews * goes well, we'll set it to RWLOCK_MAGIC.
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews "isc_mutex_init() %s: %s",
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews "isc_condition_init(readable) %s: %s",
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews "isc_condition_init(writeable) %s: %s",
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrewsisc_rwlock_lock(isc_rwlock_t *rwl, isc_rwlocktype_t type) {
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews print_lock(isc_msgcat_get(isc_msgcat, ISC_MSGSET_RWLOCK,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews print_lock(isc_msgcat_get(isc_msgcat, ISC_MSGSET_RWLOCK,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrewsisc_rwlock_unlock(isc_rwlock_t *rwl, isc_rwlocktype_t type) {
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews print_lock(isc_msgcat_get(isc_msgcat, ISC_MSGSET_RWLOCK,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews /* Does this case ever happen? */
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews print_lock(isc_msgcat_get(isc_msgcat, ISC_MSGSET_RWLOCK,
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrews#else /* ISC_PLATFORM_USETHREADS */
5c526acb82c882e41b655c31f5fa4425c87b671cMark Andrewsisc_rwlock_init(isc_rwlock_t *rwl, unsigned int read_quota,
return (ISC_R_SUCCESS);
return (ISC_R_LOCKBUSY);
return (ISC_R_LOCKBUSY);
return (ISC_R_SUCCESS);
return (ISC_R_SUCCESS);