void sc_free (int package, void *ptr) { if (ptr == NULL) { return; } else { /* uncount the allocations */ int *free_count = sc_free_count (package); #ifdef SC_ENABLE_PTHREAD sc_package_lock (package); #endif ++*free_count; #ifdef SC_ENABLE_PTHREAD sc_package_unlock (package); #endif } /* free memory */ #if defined SC_ENABLE_MEMALIGN sc_free_aligned (ptr, SC_MEMALIGN_BYTES); #else free (ptr); #endif }
void * sc_calloc (int package, size_t nmemb, size_t size) { void *ret; int *malloc_count = sc_malloc_count (package); /* allocate memory */ #if defined SC_ENABLE_MEMALIGN ret = sc_malloc_aligned (SC_MEMALIGN_BYTES, nmemb * size); memset (ret, 0, nmemb * size); #else ret = calloc (nmemb, size); if (nmemb * size > 0) { SC_CHECK_ABORTF (ret != NULL, "Allocation (calloc size %lli)", (long long int) size); } #endif /* count the allocations */ #ifdef SC_ENABLE_PTHREAD sc_package_lock (package); #endif if (nmemb * size > 0) { ++*malloc_count; } else { *malloc_count += ((ret == NULL) ? 0 : 1); } #ifdef SC_ENABLE_PTHREAD sc_package_unlock (package); #endif return ret; }
void sc_package_rc_count_add (int package_id, int toadd) { int *pcount; #ifdef SC_ENABLE_DEBUG int newvalue; #endif if (package_id == -1) { pcount = &default_rc_active; } else { SC_ASSERT (sc_package_is_registered (package_id)); pcount = &sc_packages[package_id].rc_active; } sc_package_lock (package_id); #ifdef SC_ENABLE_DEBUG newvalue = #endif *pcount += toadd; sc_package_unlock (package_id); SC_ASSERT (newvalue >= 0); }
void * sc_calloc (int package, size_t nmemb, size_t size) { void *ret; int *malloc_count = sc_malloc_count (package); ret = calloc (nmemb, size); if (nmemb * size > 0) { SC_CHECK_ABORT (ret != NULL, "Allocation"); } #ifdef SC_ENABLE_PTHREAD sc_package_lock (package); #endif if (nmemb * size > 0) { ++*malloc_count; } else { *malloc_count += ((ret == NULL) ? 0 : 1); } #ifdef SC_ENABLE_PTHREAD sc_package_unlock (package); #endif return ret; }
void sc_logv (const char *filename, int lineno, int package, int category, int priority, const char *fmt, va_list ap) { char buffer[BUFSIZ]; #ifdef SC_ENABLE_PTHREAD sc_package_lock (package); #endif vsnprintf (buffer, BUFSIZ, fmt, ap); #ifdef SC_ENABLE_PTHREAD sc_package_unlock (package); #endif sc_log (filename, lineno, package, category, priority, buffer); }
void sc_free (int package, void *ptr) { if (ptr != NULL) { int *free_count = sc_free_count (package); #ifdef SC_ENABLE_PTHREAD sc_package_lock (package); #endif ++*free_count; #ifdef SC_ENABLE_PTHREAD sc_package_unlock (package); #endif } free (ptr); }
void sc_log (const char *filename, int lineno, int package, int category, int priority, const char *msg) { int log_threshold; sc_log_handler_t log_handler; sc_package_t *p; if (package != -1 && !sc_package_is_registered (package)) { package = -1; } if (package == -1) { p = NULL; log_threshold = sc_default_log_threshold; log_handler = sc_default_log_handler; } else { p = sc_packages + package; log_threshold = (p->log_threshold == SC_LP_DEFAULT) ? sc_default_log_threshold : p->log_threshold; log_handler = (p->log_handler == NULL) ? sc_default_log_handler : p->log_handler; } if (!(category == SC_LC_NORMAL || category == SC_LC_GLOBAL)) return; if (!(priority > SC_LP_ALWAYS && priority < SC_LP_SILENT)) return; if (category == SC_LC_GLOBAL && sc_identifier > 0) return; #ifdef SC_ENABLE_PTHREAD sc_package_lock (package); #endif if (sc_trace_file != NULL && priority >= sc_trace_prio) log_handler (sc_trace_file, filename, lineno, package, category, priority, msg); if (priority >= log_threshold) log_handler (sc_log_stream != NULL ? sc_log_stream : stdout, filename, lineno, package, category, priority, msg); #ifdef SC_ENABLE_PTHREAD sc_package_unlock (package); #endif }