Changeset 5131:57cb309489a3 in roaraudio
- Timestamp:
- 09/06/11 15:07:18 (12 years ago)
- Branch:
- default
- Phase:
- public
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
ChangeLog
r5130 r5131 1 v. 0.4rc1 - ? 2 * Fixed segfaul in FLAC cf (Closes: #177) 3 1 4 v. 0.4rc0 - Mon Sep 05 2011 15:25 CEST 2 5 Prereleases: 0: Fri Aug 18 2011 27:37 CEST -
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; -
roard/codecfilter_flac.c
r4708 r5131 272 272 } 273 273 274 roar_buffer_ring_stats(self->decoder.written, &stats); 274 if ( self->decoder.written == NULL ) { 275 stats.bytes = 0; 276 } else { 277 roar_buffer_ring_stats(self->decoder.written, &stats); 278 } 275 279 } 276 280
Note: See TracChangeset
for help on using the changeset viewer.