You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2017/04/25 22:25:04 UTC
[6/6] qpid-dispatch git commit: DISPATCH-390: refactor -
log->ref_count use atomic counter
DISPATCH-390: refactor - log->ref_count use atomic counter
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/56e2845a
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/56e2845a
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/56e2845a
Branch: refs/heads/master
Commit: 56e2845a75b08d5574238e15526381fe4cbaa37c
Parents: 336c536
Author: Alan Conway <ac...@redhat.com>
Authored: Mon Mar 27 10:08:44 2017 -0400
Committer: Alan Conway <ac...@redhat.com>
Committed: Tue Apr 25 18:13:59 2017 -0400
----------------------------------------------------------------------
include/qpid/dispatch/atomic.h | 7 +++++--
src/log.c | 11 ++++++-----
2 files changed, 11 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/56e2845a/include/qpid/dispatch/atomic.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/atomic.h b/include/qpid/dispatch/atomic.h
index d72bad2..08d63f1 100644
--- a/include/qpid/dispatch/atomic.h
+++ b/include/qpid/dispatch/atomic.h
@@ -175,7 +175,10 @@ static inline void sys_atomic_destroy(sys_atomic_t *ref)
#endif
-#define sys_atomic_inc(ref) sys_atomic_add((ref), 1)
-#define sys_atomic_dec(ref) sys_atomic_sub((ref), 1)
+/** Atomic increase: NOTE returns value *before* increase, like i++ */
+static inline uint32_t sys_atomic_inc(sys_atomic_t *ref) { return sys_atomic_add((ref), 1); }
+
+/** Atomic decrease: NOTE returns value *before* decrease, like i-- */
+static inline uint32_t sys_atomic_dec(sys_atomic_t *ref) { return sys_atomic_sub((ref), 1); }
#endif
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/56e2845a/src/log.c
----------------------------------------------------------------------
diff --git a/src/log.c b/src/log.c
index 896d314..b11fd50 100644
--- a/src/log.c
+++ b/src/log.c
@@ -23,6 +23,7 @@
#include "entity.h"
#include "entity_cache.h"
#include "aprintf.h"
+#include <qpid/dispatch/atomic.h>
#include <qpid/dispatch/ctools.h>
#include <qpid/dispatch/dispatch.h>
#include "alloc.h"
@@ -70,7 +71,7 @@ static void qd_log_entry_free_lh(qd_log_entry_t* entry) {
// Ref-counted log sink, may be shared by several sources.
typedef struct log_sink_t {
- int refcount;
+ sys_atomic_t ref_count;
char *name;
bool syslog;
FILE *file;
@@ -97,9 +98,9 @@ static log_sink_t* find_log_sink_lh(const char* name) {
// Must hold the log_source_lock
static void log_sink_free_lh(log_sink_t* sink) {
if (!sink) return;
- assert(sink->refcount);
+ assert(sink->ref_count);
- if (--sink->refcount == 0) {
+ if (sys_atomic_dec(&sink->ref_count) == 1) {
DEQ_REMOVE(sink_list, sink);
free(sink->name);
if (sink->file && sink->file != stderr)
@@ -113,7 +114,7 @@ static void log_sink_free_lh(log_sink_t* sink) {
static log_sink_t* log_sink_lh(const char* name) {
log_sink_t* sink = find_log_sink_lh(name);
if (sink)
- sink->refcount++;
+ sys_atomic_inc(&sink->ref_count);
else {
bool syslog = false;
@@ -373,7 +374,7 @@ qd_log_source_t *qd_log_source_reset(const char *module)
}
static void qd_log_source_free_lh(qd_log_source_t* src) {
- DEQ_REMOVE_HEAD(source_list);
+ DEQ_REMOVE(source_list, src);
log_sink_free_lh(src->sink);
free(src->module);
free(src);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org