[blob] Make debug code always available to the compiler

Such that we don't break debug build all the time.
This commit is contained in:
Behdad Esfahbod 2010-04-28 13:16:38 -04:00
parent ba51b25c7b
commit 444fffb1ab
1 changed files with 32 additions and 46 deletions

View File

@ -36,13 +36,11 @@
#endif /* HAVE_SYS_MMAN_H */ #endif /* HAVE_SYS_MMAN_H */
#ifndef HB_DEBUG_BLOB #ifndef HB_DEBUG_BLOB
#define HB_DEBUG_BLOB HB_DEBUG #define HB_DEBUG_BLOB HB_DEBUG+0
#endif #endif
#if HB_DEBUG_BLOB
#include <stdio.h> #include <stdio.h>
#include <errno.h> #include <errno.h>
#endif
hb_blob_t _hb_blob_nil = { hb_blob_t _hb_blob_nil = {
HB_REFERENCE_COUNT_INVALID, /* ref_count */ HB_REFERENCE_COUNT_INVALID, /* ref_count */
@ -181,10 +179,9 @@ hb_blob_lock (hb_blob_t *blob)
hb_mutex_lock (blob->lock); hb_mutex_lock (blob->lock);
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__, fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
blob->lock_count, blob->data); blob->lock_count, blob->data);
#endif
blob->lock_count++; blob->lock_count++;
@ -201,10 +198,9 @@ hb_blob_unlock (hb_blob_t *blob)
hb_mutex_lock (blob->lock); hb_mutex_lock (blob->lock);
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__, fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
blob->lock_count, blob->data); blob->lock_count, blob->data);
#endif
assert (blob->lock_count > 0); assert (blob->lock_count > 0);
blob->lock_count--; blob->lock_count--;
@ -246,35 +242,30 @@ _try_make_writable_inplace_unix_locked (hb_blob_t *blob)
#endif #endif
if ((uintptr_t) -1L == pagesize) { if ((uintptr_t) -1L == pagesize) {
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: failed to get pagesize: %s\n", blob, __FUNCTION__, strerror (errno)); fprintf (stderr, "%p %s: failed to get pagesize: %s\n", blob, __FUNCTION__, strerror (errno));
#endif
return FALSE; return FALSE;
} }
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: pagesize is %u\n", blob, __FUNCTION__, pagesize); fprintf (stderr, "%p %s: pagesize is %u\n", blob, __FUNCTION__, pagesize);
#endif
mask = ~(pagesize-1); mask = ~(pagesize-1);
addr = (const char *) (((uintptr_t) blob->data) & mask); addr = (const char *) (((uintptr_t) blob->data) & mask);
length = (const char *) (((uintptr_t) blob->data + blob->length + pagesize-1) & mask) - addr; length = (const char *) (((uintptr_t) blob->data + blob->length + pagesize-1) & mask) - addr;
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: calling mprotect on [%p..%p] (%d bytes)\n", fprintf (stderr, "%p %s: calling mprotect on [%p..%p] (%d bytes)\n",
blob, __FUNCTION__, blob, __FUNCTION__,
addr, addr+length, length); addr, addr+length, length);
#endif
if (-1 == mprotect ((void *) addr, length, PROT_READ | PROT_WRITE)) { if (-1 == mprotect ((void *) addr, length, PROT_READ | PROT_WRITE)) {
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: %s\n", blob, __FUNCTION__, strerror (errno)); fprintf (stderr, "%p %s: %s\n", blob, __FUNCTION__, strerror (errno));
#endif
return FALSE; return FALSE;
} }
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: successfully made [%p..%p] (%d bytes) writable\n", fprintf (stderr, "%p %s: successfully made [%p..%p] (%d bytes) writable\n",
blob, __FUNCTION__, blob, __FUNCTION__,
addr, addr+length, length); addr, addr+length, length);
#endif
return TRUE; return TRUE;
#else #else
return FALSE; return FALSE;
@ -284,19 +275,16 @@ _try_make_writable_inplace_unix_locked (hb_blob_t *blob)
static void static void
_try_writable_inplace_locked (hb_blob_t *blob) _try_writable_inplace_locked (hb_blob_t *blob)
{ {
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: making writable\n", blob, __FUNCTION__); fprintf (stderr, "%p %s: making writable\n", blob, __FUNCTION__);
#endif
if (_try_make_writable_inplace_unix_locked (blob)) { if (_try_make_writable_inplace_unix_locked (blob)) {
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: making writable -> succeeded\n", blob, __FUNCTION__); fprintf (stderr, "%p %s: making writable -> succeeded\n", blob, __FUNCTION__);
#endif
blob->mode = HB_MEMORY_MODE_WRITABLE; blob->mode = HB_MEMORY_MODE_WRITABLE;
} else { } else {
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: making writable -> FAILED\n", blob, __FUNCTION__); fprintf (stderr, "%p %s: making writable -> FAILED\n", blob, __FUNCTION__);
#endif
/* Failed to make writable inplace, mark that */ /* Failed to make writable inplace, mark that */
blob->mode = HB_MEMORY_MODE_READONLY; blob->mode = HB_MEMORY_MODE_READONLY;
} }
@ -339,19 +327,17 @@ hb_blob_try_writable (hb_blob_t *blob)
{ {
char *new_data; char *new_data;
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__, fprintf (stderr, "%p %s (%d) -> %p\n", blob, __FUNCTION__,
blob->lock_count, blob->data); blob->lock_count, blob->data);
#endif
if (blob->lock_count) if (blob->lock_count)
goto done; goto done;
new_data = malloc (blob->length); new_data = malloc (blob->length);
if (new_data) { if (new_data) {
#if HB_DEBUG_BLOB if (HB_DEBUG_BLOB)
fprintf (stderr, "%p %s: dupped successfully -> %p\n", blob, __FUNCTION__, blob->data); fprintf (stderr, "%p %s: dupped successfully -> %p\n", blob, __FUNCTION__, blob->data);
#endif
memcpy (new_data, blob->data, blob->length); memcpy (new_data, blob->data, blob->length);
_hb_blob_destroy_user_data (blob); _hb_blob_destroy_user_data (blob);
blob->mode = HB_MEMORY_MODE_WRITABLE; blob->mode = HB_MEMORY_MODE_WRITABLE;