aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2013-01-25 16:43:38 +0100
committerStefan Hajnoczi <stefanha@redhat.com>2013-02-05 21:52:55 +0100
commite722d705ae7648a6bd94848319a11eb0afd58a17 (patch)
tree24caa47a310024e99a1cb7ace4f94b52eaface8f
parentfb3a508531227bc7fb7eee22c51d30bf2ceb15f5 (diff)
trace: Direct access of atomics is verboten, use the API
The GLib Reference Manual says: It is very important that all accesses to a particular integer or pointer be performed using only this API and that different sizes of operation are not mixed or used on overlapping memory regions. Never read or assign directly from or to a value -- always use this API. Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Harsh Prateek Bora <harsh@linux.vnet.ibm.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
-rw-r--r--trace/simple.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/trace/simple.c b/trace/simple.c
index ccbdb6a930..592ff483cc 100644
--- a/trace/simple.c
+++ b/trace/simple.c
@@ -166,13 +166,13 @@ static gpointer writeout_thread(gpointer opaque)
for (;;) {
wait_for_trace_records_available();
- if (dropped_events) {
+ if (g_atomic_int_get(&dropped_events)) {
dropped.rec.event = DROPPED_EVENT_ID,
dropped.rec.timestamp_ns = get_clock();
dropped.rec.length = sizeof(TraceRecord) + sizeof(uint64_t),
dropped.rec.reserved = 0;
while (1) {
- dropped_count = dropped_events;
+ dropped_count = g_atomic_int_get(&dropped_events);
if (g_atomic_int_compare_and_exchange(&dropped_events,
dropped_count, 0)) {
break;
@@ -214,7 +214,7 @@ int trace_record_start(TraceBufferRecord *rec, TraceEventID event, size_t datasi
uint64_t timestamp_ns = get_clock();
while (1) {
- old_idx = trace_idx;
+ old_idx = g_atomic_int_get(&trace_idx);
smp_rmb();
new_idx = old_idx + rec_len;
@@ -275,7 +275,8 @@ void trace_record_finish(TraceBufferRecord *rec)
record.event |= TRACE_RECORD_VALID;
write_to_buffer(rec->tbuf_idx, &record, sizeof(TraceRecord));
- if ((trace_idx - writeout_idx) > TRACE_BUF_FLUSH_THRESHOLD) {
+ if ((g_atomic_int_get(&trace_idx) - writeout_idx)
+ > TRACE_BUF_FLUSH_THRESHOLD) {
flush_trace_file(false);
}
}