simple.c (d38ea87ac54af64ef611de434d07c12dc0399216) | simple.c (cb8d4c8f54b8271f642f02382eec29d468bb1c77) |
---|---|
1/* 2 * Simple trace backend 3 * 4 * Copyright IBM, Corp. 2010 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2. See 7 * the COPYING file in the top-level directory. 8 * --- 94 unchanged lines hidden (view full) --- 103 104 if (!(record.event & TRACE_RECORD_VALID)) { 105 return false; 106 } 107 108 smp_rmb(); /* read memory barrier before accessing record */ 109 /* read the record header to know record length */ 110 read_from_buffer(idx, &record, sizeof(TraceRecord)); | 1/* 2 * Simple trace backend 3 * 4 * Copyright IBM, Corp. 2010 5 * 6 * This work is licensed under the terms of the GNU GPL, version 2. See 7 * the COPYING file in the top-level directory. 8 * --- 94 unchanged lines hidden (view full) --- 103 104 if (!(record.event & TRACE_RECORD_VALID)) { 105 return false; 106 } 107 108 smp_rmb(); /* read memory barrier before accessing record */ 109 /* read the record header to know record length */ 110 read_from_buffer(idx, &record, sizeof(TraceRecord)); |
111 *recordptr = malloc(record.length); /* dont use g_malloc, can deadlock when traced */ | 111 *recordptr = malloc(record.length); /* don't use g_malloc, can deadlock when traced */ |
112 /* make a copy of record to avoid being overwritten */ 113 read_from_buffer(idx, *recordptr, record.length); 114 smp_rmb(); /* memory barrier before clearing valid flag */ 115 (*recordptr)->event &= ~TRACE_RECORD_VALID; 116 /* clear the trace buffer range for consumed record otherwise any byte 117 * with its MSB set may be considered as a valid event id when the writer 118 * thread crosses this range of buffer again. 119 */ --- 55 unchanged lines hidden (view full) --- 175 dropped_count, 0)); 176 dropped.rec.arguments[0] = dropped_count; 177 unused = fwrite(&dropped.rec, dropped.rec.length, 1, trace_fp); 178 } 179 180 while (get_trace_record(idx, &recordptr)) { 181 unused = fwrite(recordptr, recordptr->length, 1, trace_fp); 182 writeout_idx += recordptr->length; | 112 /* make a copy of record to avoid being overwritten */ 113 read_from_buffer(idx, *recordptr, record.length); 114 smp_rmb(); /* memory barrier before clearing valid flag */ 115 (*recordptr)->event &= ~TRACE_RECORD_VALID; 116 /* clear the trace buffer range for consumed record otherwise any byte 117 * with its MSB set may be considered as a valid event id when the writer 118 * thread crosses this range of buffer again. 119 */ --- 55 unchanged lines hidden (view full) --- 175 dropped_count, 0)); 176 dropped.rec.arguments[0] = dropped_count; 177 unused = fwrite(&dropped.rec, dropped.rec.length, 1, trace_fp); 178 } 179 180 while (get_trace_record(idx, &recordptr)) { 181 unused = fwrite(recordptr, recordptr->length, 1, trace_fp); 182 writeout_idx += recordptr->length; |
183 free(recordptr); /* dont use g_free, can deadlock when traced */ | 183 free(recordptr); /* don't use g_free, can deadlock when traced */ |
184 idx = writeout_idx % TRACE_BUF_LEN; 185 } 186 187 fflush(trace_fp); 188 } 189 return NULL; 190} 191 --- 195 unchanged lines hidden --- | 184 idx = writeout_idx % TRACE_BUF_LEN; 185 } 186 187 fflush(trace_fp); 188 } 189 return NULL; 190} 191 --- 195 unchanged lines hidden --- |