#endif
if (!ras_ns_ev_dec_list) {
ras_ns_ev_dec_list = ns_ev_decoder;
+ ras_ns_ev_dec_list->ref_count = 0;
} else {
list = ras_ns_ev_dec_list;
while (list->next)
return -1;
ns_ev_decoder = ras_ns_ev_dec_list;
+ if (ras_ns_ev_dec_list)
+ ras_ns_ev_dec_list->ref_count++;
while (ns_ev_decoder) {
if (ns_ev_decoder->add_table && !ns_ev_decoder->stmt_dec_record) {
error = ns_ev_decoder->add_table(ras, ns_ev_decoder);
#ifdef HAVE_SQLITE3
struct ras_ns_ev_decoder *ns_ev_decoder = ras_ns_ev_dec_list;
+ if (!ras_ns_ev_dec_list)
+ return;
+
+ if (ras_ns_ev_dec_list->ref_count > 0)
+ ras_ns_ev_dec_list->ref_count--;
+ else
+ return;
+ if (ras_ns_ev_dec_list->ref_count > 0)
+ return;
+
while (ns_ev_decoder) {
if (ns_ev_decoder->stmt_dec_record) {
ras_mc_finalize_vendor_table(ns_ev_decoder->stmt_dec_record);
static void unregister_ns_ev_decoder(void)
{
#ifdef HAVE_SQLITE3
+ if (!ras_ns_ev_dec_list)
+ return;
+ ras_ns_ev_dec_list->ref_count = 1;
ras_ns_finalize_vendor_tables();
#endif
ras_ns_ev_dec_list = NULL;
struct ras_ns_ev_decoder {
struct ras_ns_ev_decoder *next;
+ uint16_t ref_count;
const char *sec_type;
int (*add_table)(struct ras_events *ras, struct ras_ns_ev_decoder *ev_decoder);
int (*decode)(struct ras_events *ras, struct ras_ns_ev_decoder *ev_decoder,