Some more information. The first time my patterndb is read from disk it's supposed to be persisted to some kind of permanent storage. But for some reason it does not seem to be. Thus when g_hash_table_lookup_extended is called, it returns NULL, and all hell breaks loose because the rest of the code assumes (reasonably) that an already-initted structure can't be NULL when you have initialized it and persisted it previously. I need to figure out how this thing is getting persisted and what is going wrong there, as the problem is not getting logged anywhere I've been able to find. I think it has to be persisted somewhere in here: log_db_parser_reload_database log_db_parser_init log_parser_init log_parser_rule_init log_process_rule_init log_process_pipe_init log_pipe_init log_center_init cfg_init cfg_initial_init initial_init Now I have a ton of code to read. :-( I really hope somebody else can help me sort this one out. Matthew. log_pipe_init (s=0x148f8ec0, cfg=0x148c9860) at logpipe.h:88 88 if (!(s->flags & PIF_INITIALIZED)) (gdb) print *s $34 = {ref_cnt = 1, flags = 0, cfg = 0x0, pipe_next = 0x148f8f10, queue = 0x2adb089e37ef <log_process_pipe_queue>, init = 0x2adb089e3723 <log_process_pipe_init>, deinit = 0x2adb089e378e <log_process_pipe_deinit>, free_fn = 0x2adb089e38cd <log_process_pipe_free>, notify = 0} ... 91 if (!s->init || s->init(s)) ... Breakpoint 1, log_db_parser_init (s=0x148f7270, cfg=0x148c9860) at dbparser.c:121 121 LogDBParser *self = (LogDBParser *) s; 123 self->db = cfg_persist_config_fetch(cfg, log_db_parser_format_persist_name(self)); log_db_parser_format_persist_name (self=0x148f7270) at dbparser.c:114 114 g_snprintf(persist_name, sizeof(persist_name), "db-parser(%s)", self->db_file); (gdb) print self->db_file $35 = (gchar *) 0x148f7320 "/home/y/conf/ysyslogng/xml/corpmon-db.xml" 115 return persist_name; (gdb) print persist_name $36 = "db-parser(/home/y/conf/ysyslogng/xml/corpmon-db.xml)", '\0' <repeats 459 times> ... cfg_persist_config_fetch (cfg=0x148c9860, name=0x2adb0a72bd60 "db-parser(/home/y/conf/ysyslogng/xml/corpmon-db.xml)") at cfg.c:599 599 gpointer res = NULL; 604 if (cfg->persist && g_hash_table_lookup_extended(cfg->persist->keys, name, &tmp1, &tmp2)) 615 return res; (gdb) print res $37 = (gpointer) 0x0 616 } ... log_db_parser_init (s=0x148f7270, cfg=0x148c9860) at dbparser.c:124 124 if (self->db) 142 log_db_parser_reload_database(self); (gdb) print self->db $38 = (PatternDB *) 0x0 ... Breakpoint 4, log_db_parser_reload_database (self=0x148f7270) at dbparser.c:61 61 if (stat(self->db_file, &st) < 0) 68 if ((self->db_file_inode == st.st_ino && self->db_file_mtime == st.st_mtime)) 98 } (gdb) print self->db_file_inode $39 = 193445917 (gdb) print st.st_ino $40 = 193445917 (gdb) print self->db_file_mtime $41 = 1292463962 (gdb) print st.st_mtim $42 = {tv_sec = 1292463962, tv_nsec = 0} ... (gdb) n log_db_parser_init (s=0x148f7270, cfg=0x148c9860) at dbparser.c:145 145 self->timer_tick_id = g_timeout_add_seconds(1, log_db_parser_timer_tick, self); (gdb) n 146 return self->db != NULL; (gdb) print self->db $43 = (PatternDB *) 0x0 147 } ... log_parser_init (s=0x148f7270, cfg=0x148c9860) at logparser.h:58 58 } ... log_parser_rule_init (s=0x148f7360, cfg=0x148c9860) at logparser.c:106 106 success = FALSE; 103 for (l = self->parser_list; l; l = l->next) 108 return success; 110 } ... log_process_rule_init (s=0x148f7360, cfg=0x148c9860) at logprocess.h:64 64 } ... log_process_pipe_init (s=0x148f8ec0) at logprocess.c:61 61 } ... log_pipe_init (s=0x148f8ec0, cfg=0x148c9860) at logpipe.h:96 96 return FALSE; 99 } ... log_center_init (self=0x148d56f0, cfg=0x148c9860) at center.c:510 510 msg_error("Error initializing message pipeline",