GRAYBYTE WORDPRESS FILE MANAGER4811

Server IP : 68.65.123.43 / Your IP : 216.73.216.162
System : Linux server266.web-hosting.com 4.18.0-513.18.1.lve.el8.x86_64 #1 SMP Thu Feb 22 12:55:50 UTC 2024 x86_64
PHP Version : 8.0.30
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /usr/include/bind9/isc/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /usr/include/bind9/isc//refcount.h
/*
 * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, you can obtain one at https://mozilla.org/MPL/2.0/.
 *
 * See the COPYRIGHT file distributed with this work for additional
 * information regarding copyright ownership.
 */


#ifndef ISC_REFCOUNT_H
#define ISC_REFCOUNT_H 1

#include <inttypes.h>

#include <isc/assertions.h>
#include <isc/atomic.h>
#include <isc/error.h>
#include <isc/lang.h>
#include <isc/mutex.h>
#include <isc/platform.h>
#include <isc/types.h>

#if defined(ISC_PLATFORM_HAVESTDATOMIC)
#if defined (__cplusplus)
#include <isc/stdatomic.h>
#else
#include <stdatomic.h>
#endif
#endif

/*! \file isc/refcount.h
 * \brief Implements a locked reference counter.
 *
 * These functions may actually be
 * implemented using macros, and implementations of these macros are below.
 * The isc_refcount_t type should not be accessed directly, as its contents
 * depend on the implementation.
 */

ISC_LANG_BEGINDECLS

/*
 * Function prototypes
 */

/*
 * isc_result_t
 * isc_refcount_init(isc_refcount_t *ref, unsigned int n);
 *
 * Initialize the reference counter.  There will be 'n' initial references.
 *
 * Requires:
 *	ref != NULL
 */

/*
 * void
 * isc_refcount_destroy(isc_refcount_t *ref);
 *
 * Destroys a reference counter.
 *
 * Requires:
 *	ref != NULL
 *	The number of references is 0.
 */

/*
 * void
 * isc_refcount_increment(isc_refcount_t *ref, unsigned int *targetp);
 * isc_refcount_increment0(isc_refcount_t *ref, unsigned int *targetp);
 *
 * Increments the reference count, returning the new value in targetp if it's
 * not NULL.  The reference counter typically begins with the initial counter
 * of 1, and will be destroyed once the counter reaches 0.  Thus,
 * isc_refcount_increment() additionally requires the previous counter be
 * larger than 0 so that an error which violates the usage can be easily
 * caught.  isc_refcount_increment0() does not have this restriction.
 *
 * Requires:
 *	ref != NULL.
 */

/*
 * void
 * isc_refcount_decrement(isc_refcount_t *ref, unsigned int *targetp);
 *
 * Decrements the reference count,  returning the new value in targetp if it's
 * not NULL.
 *
 * Requires:
 *	ref != NULL.
 */


/*
 * Sample implementations
 */
#ifdef ISC_PLATFORM_USETHREADS

#if defined(ISC_PLATFORM_HAVESTDATOMIC)
# define ISC_REFCOUNT_HAVEATOMIC 1
# define ISC_REFCOUNT_HAVESTDATOMIC 1
#else /* defined(ISC_PLATFORM_HAVESTDATOMIC) */
# if defined(ISC_PLATFORM_HAVEXADD)
#  define ISC_REFCOUNT_HAVEATOMIC 1
# endif /* defined(ISC_PLATFORM_HAVEXADD */
#endif /* !defined(ISC_REFCOUNT_HAVEATOMIC) */

#if defined(ISC_REFCOUNT_HAVEATOMIC)

typedef struct isc_refcount {
#if defined(ISC_REFCOUNT_HAVESTDATOMIC)
	atomic_int_fast32_t refs;
#else
	int32_t refs;
#endif
} isc_refcount_t;

#if defined(ISC_REFCOUNT_HAVESTDATOMIC)

#define isc_refcount_current(rp)					\
	((unsigned int)(atomic_load_explicit(&(rp)->refs,		\
					     memory_order_acquire)))
#define isc_refcount_destroy(rp) ISC_REQUIRE(isc_refcount_current(rp) == 0)

#define isc_refcount_increment0(rp, tp)				\
	do {							\
		unsigned int *_tmp = (unsigned int *)(tp);	\
		int32_t prev;				\
		prev = atomic_fetch_add_explicit		\
			(&(rp)->refs, 1, memory_order_relaxed); \
		if (_tmp != NULL)				\
			*_tmp = prev + 1;			\
	} while (0)

#define isc_refcount_increment(rp, tp)				\
	do {							\
		unsigned int *_tmp = (unsigned int *)(tp);	\
		int32_t prev;				\
		prev = atomic_fetch_add_explicit		\
			(&(rp)->refs, 1, memory_order_relaxed); \
		ISC_REQUIRE(prev > 0);				\
		if (_tmp != NULL)				\
			*_tmp = prev + 1;			\
	} while (0)

#define isc_refcount_decrement(rp, tp)				\
	do {							\
		unsigned int *_tmp = (unsigned int *)(tp);	\
		int32_t prev;				\
		prev = atomic_fetch_sub_explicit		\
			(&(rp)->refs, 1, memory_order_acq_rel); \
		ISC_REQUIRE(prev > 0);				\
		if (_tmp != NULL)				\
			*_tmp = prev - 1;			\
	} while (0)

#else /* defined(ISC_REFCOUNT_HAVESTDATOMIC) */

#define isc_refcount_current(rp)				\
	((unsigned int)(isc_atomic_xadd(&(rp)->refs, 0)))
#define isc_refcount_destroy(rp) ISC_REQUIRE(isc_refcount_current(rp) == 0)

#define isc_refcount_increment0(rp, tp)				\
	do {							\
		unsigned int *_tmp = (unsigned int *)(tp);	\
		int32_t prev;				\
		prev = isc_atomic_xadd(&(rp)->refs, 1);		\
		if (_tmp != NULL)				\
			*_tmp = prev + 1;			\
	} while (0)

#define isc_refcount_increment(rp, tp)				\
	do {							\
		unsigned int *_tmp = (unsigned int *)(tp);	\
		int32_t prev;				\
		prev = isc_atomic_xadd(&(rp)->refs, 1);		\
		ISC_REQUIRE(prev > 0);				\
		if (_tmp != NULL)				\
			*_tmp = prev + 1;			\
	} while (0)

#define isc_refcount_decrement(rp, tp)				\
	do {							\
		unsigned int *_tmp = (unsigned int *)(tp);	\
		int32_t prev;				\
		prev = isc_atomic_xadd(&(rp)->refs, -1);	\
		ISC_REQUIRE(prev > 0);				\
		if (_tmp != NULL)				\
			*_tmp = prev - 1;			\
	} while (0)

#endif /* defined(ISC_REFCOUNT_HAVESTDATOMIC) */

#else /* defined(ISC_REFCOUNT_HAVEATOMIC) */

typedef struct isc_refcount {
	int refs;
	isc_mutex_t lock;
} isc_refcount_t;

/*% Destroys a reference counter. */
#define isc_refcount_destroy(rp)					\
	do {								\
		isc_result_t _result;					\
		ISC_REQUIRE((rp)->refs == 0);				\
		_result = isc_mutex_destroy(&(rp)->lock);		\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
	} while (0)

unsigned int isc_refcount_current(isc_refcount_t *rp);

/*%
 * Increments the reference count, returning the new value in
 * 'tp' if it's not NULL.
 */
#define isc_refcount_increment0(rp, tp)					\
	do {								\
		isc_result_t _result;					\
		unsigned int *_tmp = (unsigned int *)(tp);		\
		_result = isc_mutex_lock(&(rp)->lock);			\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
		++((rp)->refs);						\
		if (_tmp != NULL)					\
			*_tmp = ((rp)->refs);				\
		_result = isc_mutex_unlock(&(rp)->lock);		\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
	} while (0)

#define isc_refcount_increment(rp, tp)					\
	do {								\
		isc_result_t _result;					\
		unsigned int *_tmp = (unsigned int *)(tp);		\
		_result = isc_mutex_lock(&(rp)->lock);			\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
		ISC_REQUIRE((rp)->refs > 0);				\
		++((rp)->refs);						\
		if (_tmp != NULL)					\
			*_tmp = ((rp)->refs);				\
		_result = isc_mutex_unlock(&(rp)->lock);		\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
	} while (0)

/*%
 * Decrements the reference count, returning the new value in 'tp'
 * if it's not NULL.
 */
#define isc_refcount_decrement(rp, tp)					\
	do {								\
		isc_result_t _result;					\
		unsigned int *_tmp = (unsigned int *)(tp);		\
		_result = isc_mutex_lock(&(rp)->lock);			\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
		ISC_REQUIRE((rp)->refs > 0);				\
		--((rp)->refs);						\
		if (_tmp != NULL)					\
			*_tmp = ((rp)->refs);				\
		_result = isc_mutex_unlock(&(rp)->lock);		\
		ISC_ERROR_RUNTIMECHECK(_result == ISC_R_SUCCESS);	\
	} while (0)

#endif /* defined(ISC_REFCOUNT_ATOMIC) */

#else  /* ISC_PLATFORM_USETHREADS */

typedef struct isc_refcount {
	int refs;
} isc_refcount_t;

#define isc_refcount_destroy(rp) ISC_REQUIRE((rp)->refs == 0)
#define isc_refcount_current(rp) ((unsigned int)((rp)->refs))

#define isc_refcount_increment0(rp, tp)					\
	do {								\
		unsigned int *_tmp = (unsigned int *)(tp);		\
		int _n = ++(rp)->refs;					\
		if (_tmp != NULL)					\
			*_tmp = _n;					\
	} while (0)

#define isc_refcount_increment(rp, tp)					\
	do {								\
		unsigned int *_tmp = (unsigned int *)(tp);		\
		int _n;							\
		ISC_REQUIRE((rp)->refs > 0);				\
		_n = ++(rp)->refs;					\
		if (_tmp != NULL)					\
			*_tmp = _n;					\
	} while (0)

#define isc_refcount_decrement(rp, tp)					\
	do {								\
		unsigned int *_tmp = (unsigned int *)(tp);		\
		int _n;							\
		ISC_REQUIRE((rp)->refs > 0);				\
		_n = --(rp)->refs;					\
		if (_tmp != NULL)					\
			*_tmp = _n;					\
	} while (0)

#endif /* ISC_PLATFORM_USETHREADS */

isc_result_t
isc_refcount_init(isc_refcount_t *ref, unsigned int n);

ISC_LANG_ENDDECLS

#endif /* ISC_REFCOUNT_H */

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
February 21 2025 04:13:15
root / root
0755
aes.h
1.055 KB
February 20 2025 09:05:24
root / root
0644
app.h
10.232 KB
February 20 2025 09:05:24
root / root
0644
assertions.h
2.839 KB
February 20 2025 09:05:24
root / root
0644
atomic.h
4.07 KB
February 20 2025 09:05:24
root / root
0644
backtrace.h
3.8 KB
February 20 2025 09:05:24
root / root
0644
base32.h
4.349 KB
February 20 2025 09:05:24
root / root
0644
base64.h
2.799 KB
February 20 2025 09:05:24
root / root
0644
bind9.h
0.811 KB
February 20 2025 09:05:24
root / root
0644
boolean.h
0.58 KB
February 20 2025 09:05:24
root / root
0644
buffer.h
25.652 KB
February 20 2025 09:05:24
root / root
0644
bufferlist.h
1.418 KB
February 20 2025 09:05:24
root / root
0644
cmocka.h
1.351 KB
February 20 2025 09:05:24
root / root
0644
commandline.h
1.673 KB
February 20 2025 09:05:24
root / root
0644
condition.h
1.443 KB
February 20 2025 09:05:24
root / root
0644
counter.h
1.881 KB
February 20 2025 09:05:24
root / root
0644
crc64.h
0.975 KB
February 20 2025 09:05:24
root / root
0644
deprecated.h
0.608 KB
February 20 2025 09:05:24
root / root
0644
dir.h
1.561 KB
February 20 2025 09:05:24
root / root
0644
endian.h
4.666 KB
February 20 2025 09:05:24
root / root
0644
entropy.h
10.13 KB
February 20 2025 09:05:24
root / root
0644
errno.h
0.644 KB
February 20 2025 09:05:24
root / root
0644
errno2result.h
0.881 KB
February 20 2025 09:05:37
root / root
0644
error.h
1.396 KB
February 20 2025 09:05:24
root / root
0644
event.h
2.981 KB
February 20 2025 09:05:24
root / root
0644
eventclass.h
1.349 KB
February 20 2025 09:05:24
root / root
0644
file.h
11.394 KB
February 20 2025 09:05:24
root / root
0644
formatcheck.h
0.872 KB
February 20 2025 09:05:24
root / root
0644
fsaccess.h
7.268 KB
February 20 2025 09:05:24
root / root
0644
hash.h
7.482 KB
February 20 2025 09:05:24
root / root
0644
heap.h
5.141 KB
February 20 2025 09:05:24
root / root
0644
hex.h
2.74 KB
February 20 2025 09:05:24
root / root
0644
hmacmd5.h
1.745 KB
February 20 2025 09:05:24
root / root
0644
hmacsha.h
4.405 KB
February 20 2025 09:05:24
root / root
0644
ht.h
4.293 KB
February 20 2025 09:05:24
root / root
0644
httpd.h
2.264 KB
February 20 2025 09:05:24
root / root
0644
int.h
1.063 KB
February 20 2025 09:05:24
root / root
0644
interfaceiter.h
3.047 KB
February 20 2025 09:05:24
root / root
0644
iterated_hash.h
1.021 KB
February 20 2025 09:05:24
root / root
0644
json.h
1.425 KB
February 20 2025 09:05:24
root / root
0644
keyboard.h
0.966 KB
February 20 2025 09:05:24
root / root
0644
lang.h
0.622 KB
February 20 2025 09:05:24
root / root
0644
lex.h
9.542 KB
February 20 2025 09:05:24
root / root
0644
lfsr.h
2.889 KB
February 20 2025 09:05:24
root / root
0644
lib.h
1.043 KB
February 20 2025 09:05:24
root / root
0644
likely.h
0.799 KB
February 20 2025 09:05:24
root / root
0644
list.h
5.616 KB
February 20 2025 09:05:24
root / root
0644
log.h
28.061 KB
February 20 2025 09:05:24
root / root
0644
magic.h
0.971 KB
February 20 2025 09:05:24
root / root
0644
md5.h
2.324 KB
February 20 2025 09:05:24
root / root
0644
mem.h
20.615 KB
February 20 2025 09:05:24
root / root
0644
meminfo.h
0.693 KB
February 20 2025 09:05:24
root / root
0644
msgcat.h
2.662 KB
February 20 2025 09:05:24
root / root
0644
msgs.h
8.225 KB
February 20 2025 09:05:24
root / root
0644
mutex.h
3.441 KB
February 20 2025 09:05:24
root / root
0644
mutexblock.h
1.343 KB
February 20 2025 09:05:24
root / root
0644
net.h
10.287 KB
February 20 2025 09:05:24
root / root
0644
netaddr.h
4.482 KB
February 20 2025 09:05:24
root / root
0644
netdb.h
0.843 KB
February 20 2025 09:05:24
root / root
0644
netscope.h
0.944 KB
February 20 2025 09:05:24
root / root
0644
offset.h
0.684 KB
February 20 2025 09:05:24
root / root
0644
once.h
0.96 KB
February 20 2025 09:05:24
root / root
0644
ondestroy.h
2.733 KB
February 20 2025 09:05:24
root / root
0644
os.h
0.655 KB
February 20 2025 09:05:24
root / root
0644
parseint.h
1.506 KB
February 20 2025 09:05:24
root / root
0644
platform.h
9.489 KB
February 20 2025 09:05:24
root / root
0644
pool.h
3.42 KB
February 20 2025 09:05:24
root / root
0644
portset.h
3.218 KB
February 20 2025 09:05:24
root / root
0644
print.h
2.417 KB
February 20 2025 09:05:24
root / root
0644
queue.h
5.082 KB
February 20 2025 09:05:24
root / root
0644
quota.h
2.383 KB
February 20 2025 09:05:24
root / root
0644
radix.h
6.339 KB
February 20 2025 09:05:24
root / root
0644
random.h
3.498 KB
February 20 2025 09:05:24
root / root
0644
ratelimiter.h
3.415 KB
February 20 2025 09:05:24
root / root
0644
refcount.h
8.001 KB
February 20 2025 09:05:24
root / root
0644
regex.h
0.749 KB
February 20 2025 09:05:24
root / root
0644
region.h
1.986 KB
February 20 2025 09:05:24
root / root
0644
resource.h
2.795 KB
February 20 2025 09:05:24
root / root
0644
result.h
4.865 KB
February 20 2025 09:05:24
root / root
0644
resultclass.h
1.562 KB
February 20 2025 09:05:24
root / root
0644
rwlock.h
3.718 KB
February 20 2025 09:05:24
root / root
0644
safe.h
1.32 KB
February 20 2025 09:05:24
root / root
0644
serial.h
1.336 KB
February 20 2025 09:05:24
root / root
0644
sha1.h
1.52 KB
February 20 2025 09:05:24
root / root
0644
sha2.h
5.599 KB
February 20 2025 09:05:24
root / root
0644
siphash.h
0.717 KB
February 20 2025 09:05:24
root / root
0644
sockaddr.h
5.897 KB
February 20 2025 09:05:24
root / root
0644
socket.h
35.796 KB
February 20 2025 09:05:24
root / root
0644
stat.h
0.787 KB
February 20 2025 09:05:24
root / root
0644
stats.h
3.622 KB
February 20 2025 09:05:24
root / root
0644
stdatomic.h
5.127 KB
February 20 2025 09:05:24
root / root
0644
stdio.h
1.745 KB
February 20 2025 09:05:24
root / root
0644
stdlib.h
0.688 KB
February 20 2025 09:05:24
root / root
0644
stdtime.h
1.04 KB
February 20 2025 09:05:24
root / root
0644
strerror.h
0.759 KB
February 20 2025 09:05:24
root / root
0644
string.h
5.878 KB
February 20 2025 09:05:24
root / root
0644
symtab.h
4.225 KB
February 20 2025 09:05:24
root / root
0644
syslog.h
0.824 KB
February 20 2025 09:05:24
root / root
0644
task.h
21.039 KB
February 20 2025 09:05:24
root / root
0644
taskpool.h
3.622 KB
February 20 2025 09:05:24
root / root
0644
thread.h
1.471 KB
February 20 2025 09:05:24
root / root
0644
time.h
8.668 KB
February 20 2025 09:05:24
root / root
0644
timer.h
10.542 KB
February 20 2025 09:05:24
root / root
0644
tm.h
0.874 KB
February 20 2025 09:05:24
root / root
0644
types.h
5.645 KB
February 20 2025 09:05:24
root / root
0644
utf8.h
0.906 KB
February 20 2025 09:05:24
root / root
0644
util.h
10.29 KB
February 20 2025 09:05:24
root / root
0644
version.h
0.673 KB
February 20 2025 09:05:24
root / root
0644
xml.h
1.068 KB
February 20 2025 09:05:24
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF