Changeset 5131:57cb309489a3 in roaraudio for libroar
- Timestamp:
- 09/06/11 15:07:18 (13 years ago)
- Branch:
- default
- Phase:
- public
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libroar/buffer.c
r5111 r5131 58 58 59 59 #define _ckbuf_free(m) if ( buf == NULL || (m) ) { roar_err_set(ROAR_ERROR_FAULT); return -1; } 60 #define _ckbuf(m) _ckbuf_free((m)); if ( _ckmem_corruption(buf) == -1 ) return -1; 61 62 static int inline _ckmem_corruption(struct roar_buffer * buf) { 63 int flags = buf->flags & (ROAR_BUFFER_FLAG_USEABLE|ROAR_BUFFER_FLAG_FREED); 60 #define _ckbuf(m) if ( _ckmem_corruption(buf, (m)) == -1 ) return -1; 61 62 // if we use the 'inline' keyword here the program segfaults. why? 63 static int _ckmem_corruption(volatile struct roar_buffer * buf, int m) { 64 int flags; 65 66 ROAR_DBG("_ckmem_corruption(buf=%p) = ?", buf); 67 68 // we need to recheck here, why? 69 // gcc changes the order of the above macros. why? 70 // this is a strange world. 71 if ( buf == NULL || m ) { 72 ROAR_DBG("_ckmem_corruption(buf=%p) = -1 // FAULT", buf); 73 roar_err_set(ROAR_ERROR_FAULT); 74 return -1; 75 } 76 77 ROAR_DBG("_ckmem_corruption(buf=%p) = ?", buf); 78 79 flags = buf->flags & (ROAR_BUFFER_FLAG_USEABLE|ROAR_BUFFER_FLAG_FREED); 64 80 65 81 ROAR_DBG("_ckmem_corruption(buf=%p{.flags=0x%.4x, ...} = ?", buf, buf->flags); … … 168 184 } 169 185 170 _ckmem_corruption(buf );186 _ckmem_corruption(buf, 0); 171 187 172 188 ROAR_DBG("roar_buffer_unref(buf=%p) = ?", buf); … … 196 212 ROAR_DBG("roar_buffer_unref(buf=%p) = ?", buf); 197 213 198 _ckmem_corruption(cur );214 _ckmem_corruption(cur, 0); 199 215 200 216 if ( roar_buffer_get_flag(cur, ROAR_BUFFER_FLAG_NOFREE) != 1 ) … … 370 386 ROAR_DBG("roar_buffer_shift_out(*): todo=%u, cur=%p", (unsigned int) todo, cur); 371 387 372 _ckmem_corruption(cur );388 _ckmem_corruption(cur, 0); 373 389 374 390 if ( roar_buffer_get_len(cur, &cl) == -1 ) … … 570 586 571 587 int roar_buffer_ring_stats (struct roar_buffer * buf, struct roar_buffer_stats * stats) { 572 _ckbuf(0) 588 ROAR_DBG("roar_buffer_ring_stats(buf=%p, stats=%p) = ?", buf, stats); 589 590 _ckbuf(0) 591 592 ROAR_DBG("roar_buffer_ring_stats(buf=%p, stats=%p) = ?", buf, stats); 573 593 574 594 stats->parts = 0;
Note: See TracChangeset
for help on using the changeset viewer.