203
187
typedef GList *GListPtr;
205
/* LOG_DEBUG = 7, make LOG_TRACE ::= -VVVVV */
211
# define LOG_TRACE 12
213
# define LOG_DEBUG_2 LOG_TRACE
214
# define LOG_DEBUG_3 LOG_TRACE
215
# define LOG_DEBUG_4 LOG_TRACE
216
# define LOG_DEBUG_5 LOG_TRACE
217
# define LOG_DEBUG_6 LOG_TRACE
219
# define LOG_MSG LOG_TRACE
222
* Throughout the macros below, note the leading, pre-comma, space in the
223
* various ' , ##args' occurences to aid portability across versions of 'gcc'.
224
* http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html#Variadic-Macros
228
# define CRM_TRACE_INIT_DATA(name) QB_LOG_INIT_DATA(name)
230
# define do_crm_log(level, fmt, args...) do { \
231
qb_log_from_external_source( __func__, __FILE__, fmt, level, __LINE__, 0, ##args); \
234
/* level /MUST/ be a constant or compilation will fail */
235
# define do_crm_log_unlikely(level, fmt, args...) do { \
236
static struct qb_log_callsite *trace_cs = NULL; \
237
if(trace_cs == NULL) { \
238
trace_cs = qb_log_callsite_get(__func__, __FILE__, fmt, level, __LINE__, 0); \
240
if (trace_cs && trace_cs->targets) { \
241
qb_log_from_external_source( \
242
__func__, __FILE__, fmt, level, __LINE__, 0, ##args); \
246
# define CRM_LOG_ASSERT(expr) do { \
247
if(__unlikely((expr) == FALSE)) { \
248
static struct qb_log_callsite *core_cs = NULL; \
249
if(core_cs == NULL) { \
250
qb_log_callsite_get(__func__, __FILE__, "log-assert", LOG_TRACE, __LINE__, 0); \
252
crm_abort(__FILE__, __PRETTY_FUNCTION__, __LINE__, #expr, \
253
core_cs?core_cs->targets:FALSE, TRUE); \
257
# define CRM_CHECK(expr, failure_action) do { \
258
if(__unlikely((expr) == FALSE)) { \
259
static struct qb_log_callsite *core_cs = NULL; \
260
if(core_cs == NULL) { \
261
qb_log_callsite_get(__func__, __FILE__, "check-assert", LOG_TRACE, __LINE__, 0); \
263
crm_abort(__FILE__, __PRETTY_FUNCTION__, __LINE__, #expr, \
264
core_cs?core_cs->targets:FALSE, TRUE); \
269
# define do_crm_log_xml(level, text, xml) do { \
270
static struct qb_log_callsite *xml_cs = NULL; \
271
if(xml_cs == NULL) { \
272
qb_log_callsite_get(__func__, __FILE__, "xml-blog", LOG_TRACE, __LINE__, 0); \
274
if (xml_cs && xml_cs->targets) { \
275
log_data_element(level, __FILE__, __PRETTY_FUNCTION__, __LINE__, text, xml, 0, TRUE); \
279
# define do_crm_log_alias(level, file, function, line, fmt, args...) do { \
280
qb_log_from_external_source(function, file, fmt, level, line, 0, ##args); \
283
# define do_crm_log_always(level, fmt, args...) qb_log(level, "%s: " fmt, __PRETTY_FUNCTION__ , ##args)
285
# define crm_crit(fmt, args...) qb_logt(LOG_CRIT, 0, fmt , ##args)
286
# define crm_err(fmt, args...) qb_logt(LOG_ERR, 0, fmt , ##args)
287
# define crm_warn(fmt, args...) qb_logt(LOG_WARNING, 0, fmt , ##args)
288
# define crm_notice(fmt, args...) qb_logt(LOG_NOTICE, 0, fmt , ##args)
289
# define crm_info(fmt, args...) qb_logt(LOG_INFO, 0, fmt , ##args)
290
# define crm_debug(fmt, args...) qb_logt(LOG_DEBUG, 0, fmt , ##args)
291
# define crm_trace(fmt, args...) do_crm_log_unlikely(LOG_TRACE, fmt , ##args)
294
# define CRM_TRACE_INIT_DATA(name)
296
# define do_crm_log(level, fmt, args...) do { \
297
if(__likely((level) <= crm_log_level)) { \
298
cl_log((level)>LOG_DEBUG?LOG_DEBUG:(level), "%s: " fmt, __PRETTY_FUNCTION__ , ##args); \
302
# define do_crm_log_unlikely(level, fmt, args...) do { \
303
if(__unlikely((level) <= crm_log_level)) { \
304
cl_log((level)>LOG_DEBUG?LOG_DEBUG:(level), "%s: " fmt, __PRETTY_FUNCTION__ , ##args); \
308
# define do_crm_log_xml(level, text, xml) do { \
310
} else if(__unlikely((level) <= crm_log_level)) { \
311
log_data_element((level)>LOG_DEBUG?LOG_DEBUG:(level), __FILE__, __PRETTY_FUNCTION__, 0, text, xml, 0, TRUE); \
315
# define do_crm_log_alias(level, file, function, line, fmt, args...) do { \
316
if((level) <= crm_log_level) { \
317
cl_log((level)>LOG_DEBUG?LOG_DEBUG:(level), "%s: "fmt, function, ##args); \
321
# define do_crm_log_always(level, fmt, args...) cl_log(level, "%s: " fmt, __PRETTY_FUNCTION__ , ##args)
323
# define crm_crit(fmt, args...) do_crm_log_always(LOG_CRIT, fmt , ##args)
324
# define crm_err(fmt, args...) do_crm_log(LOG_ERR, fmt , ##args)
325
# define crm_warn(fmt, args...) do_crm_log(LOG_WARNING, fmt , ##args)
326
# define crm_notice(fmt, args...) do_crm_log(LOG_NOTICE, fmt , ##args)
327
# define crm_info(fmt, args...) do_crm_log(LOG_INFO, fmt , ##args)
328
# define crm_debug(fmt, args...) do_crm_log_unlikely(LOG_DEBUG, fmt , ##args)
329
# define crm_trace(fmt, args...) do_crm_log_unlikely(LOG_TRACE, fmt , ##args)
331
# define CRM_LOG_ASSERT(expr) do { \
332
if(__unlikely((expr) == FALSE)) { \
333
crm_abort(__FILE__, __PRETTY_FUNCTION__, __LINE__, #expr, \
338
# define CRM_CHECK(expr, failure_action) do { \
339
if(__unlikely((expr) == FALSE)) { \
340
crm_abort(__FILE__, __PRETTY_FUNCTION__, __LINE__, #expr, \
348
# define crm_debug_2 crm_trace
349
# define crm_debug_3 crm_trace
350
# define crm_debug_4 crm_trace
351
# define crm_debug_5 crm_trace
352
# define crm_debug_6 crm_trace
354
# define crm_perror(level, fmt, args...) do { \
355
const char *err = strerror(errno); \
356
fprintf(stderr, fmt ": %s (%d)\n", ##args, err, errno); \
357
do_crm_log(level, fmt ": %s (%d)", ##args, err, errno); \
189
# include <crm/common/logging.h>
360
190
# include <crm/common/util.h>
362
# define crm_log_xml_crit(xml, text) do_crm_log_xml(LOG_CRIT, text, xml)
363
# define crm_log_xml_err(xml, text) do_crm_log_xml(LOG_ERR, text, xml)
364
# define crm_log_xml_warn(xml, text) do_crm_log_xml(LOG_WARNING, text, xml)
365
# define crm_log_xml_notice(xml, text) do_crm_log_xml(LOG_NOTICE, text, xml)
366
# define crm_log_xml_info(xml, text) do_crm_log_xml(LOG_INFO, text, xml)
367
# define crm_log_xml_debug(xml, text) do_crm_log_xml(LOG_DEBUG, text, xml)
368
# define crm_log_xml_trace(xml, text) do_crm_log_xml(LOG_TRACE, text, xml)
370
# define crm_log_xml do_crm_log_xml
371
# define crm_log_xml_debug_2 crm_log_xml_trace
372
# define crm_log_xml_debug_3 crm_log_xml_trace
373
# define crm_log_xml_debug_4 crm_log_xml_trace
374
# define crm_log_xml_debug_5 crm_log_xml_trace
376
# define crm_str(x) (const char*)(x?x:"<null>")
378
# define crm_malloc0(malloc_obj, length) do { \
379
malloc_obj = malloc(length); \
380
if(malloc_obj == NULL) { \
381
crm_err("Failed allocation of %lu bytes", (unsigned long)length); \
382
CRM_ASSERT(malloc_obj != NULL); \
384
memset(malloc_obj, 0, length); \
387
# define crm_malloc(malloc_obj, length) do { \
388
malloc_obj = malloc(length); \
389
if(malloc_obj == NULL) { \
390
crm_err("Failed allocation of %lu bytes", (unsigned long)length); \
391
CRM_ASSERT(malloc_obj != NULL); \
395
# define crm_realloc(realloc_obj, length) do { \
396
realloc_obj = realloc(realloc_obj, length); \
397
CRM_ASSERT(realloc_obj != NULL); \
400
# define crm_free(free_obj) do { free(free_obj); free_obj=NULL; } while(0)
401
# define crm_msg_del(msg) do { if(msg != NULL) { ha_msg_del(msg); msg = NULL; } } while(0)
403
# define crm_strdup(str) crm_strdup_fn(str, __FILE__, __PRETTY_FUNCTION__, __LINE__)
191
# include <crm/error.h>
405
193
# define crm_str_hash g_str_hash_traditional
406
extern guint g_str_hash_traditional(gconstpointer v);
408
extern void update_all_trace_data(void);
411
slist_basic_destroy(GListPtr list)
413
GListPtr gIter = NULL;
415
for (gIter = list; gIter != NULL; gIter = gIter->next) {
421
/* These two macros are no longer to be used
422
* They exist for compatability reasons and will be removed in a
424
* Use something like this instead:
426
GListPtr gIter = rsc->children;
427
for(; gIter != NULL; gIter = gIter->next) {
428
resource_t *child_rsc = (resource_t*)gIter->data;
433
# define slist_destroy(child_type, child, parent, a) do { \
434
GListPtr __crm_iter_head = parent; \
435
child_type *child = NULL; \
436
while(__crm_iter_head != NULL) { \
437
child = (child_type *) __crm_iter_head->data; \
438
__crm_iter_head = __crm_iter_head->next; \
441
g_list_free(parent); \
444
# define slist_iter(child, child_type, parent, counter, a) do { \
445
GListPtr __crm_iter_head = parent; \
446
child_type *child = NULL; \
448
for(; __crm_iter_head != NULL; counter++) { \
449
child = (child_type *) __crm_iter_head->data; \
450
__crm_iter_head = __crm_iter_head->next; \
195
guint g_str_hash_traditional(gconstpointer v);