Module: kamailio Branch: 4.4 Commit: 84d73b950f3ec13fe5f5345a4440d0909e30fff4 URL: https://github.com/kamailio/kamailio/commit/84d73b950f3ec13fe5f5345a4440d0909e30fff4
Author: Daniel-Constantin Mierla <[email protected]> Committer: Daniel-Constantin Mierla <[email protected]> Date: 2016-03-14T11:47:59+01:00 tsilo: lock before linking var to the entry in slot - entry points to the address of first entry, which can be updated before aquiring the lock (cherry picked from commit 8ae2713477027a229ae4ee7045557151e467aff3) --- Modified: modules/tsilo/ts_rpc.c --- Diff: https://github.com/kamailio/kamailio/commit/84d73b950f3ec13fe5f5345a4440d0909e30fff4.diff Patch: https://github.com/kamailio/kamailio/commit/84d73b950f3ec13fe5f5345a4440d0909e30fff4.patch --- diff --git a/modules/tsilo/ts_rpc.c b/modules/tsilo/ts_rpc.c index 20783f4..7a3b659 100644 --- a/modules/tsilo/ts_rpc.c +++ b/modules/tsilo/ts_rpc.c @@ -45,6 +45,9 @@ static inline int rpc_dump_transaction(rpc_t* rpc, void* ctx, void *ih, ts_trans { void* vh; + if(t==NULL) + return -1; + if(rpc->struct_add(ih, "{", "Transaction", &vh)<0) { rpc->fault(ctx, 500, "Internal error creating transaction struct"); @@ -73,9 +76,9 @@ static inline int rpc_dump_transaction(rpc_t* rpc, void* ctx, void *ih, ts_trans */ static void rpc_tsilo_dump(rpc_t *rpc, void *c) { - ts_transaction_t* trans; - struct ts_urecord* record; - struct ts_entry* entry; + ts_transaction_t* trans = NULL; + struct ts_urecord* record = NULL; + struct ts_entry* entry = NULL; str brief = {0, 0}; @@ -115,8 +118,8 @@ static void rpc_tsilo_dump(rpc_t *rpc, void *c) /* add the entries per hash */ for(i=0,n=0,max=0,ntrans=0; i<t_table->size; i++) { + lock_entry(&t_table->entries[i]); entry = &t_table->entries[i]; - lock_entry(entry); n += entry->n; if(max<entry->n) @@ -130,7 +133,7 @@ static void rpc_tsilo_dump(rpc_t *rpc, void *c) "Hash", record->rurihash, "Transactions", &ih)<0) { - unlock_entry(entry); + unlock_entry(&t_table->entries[i]); rpc->fault(c, 500, "Internal error creating ruri struct"); return; } @@ -139,13 +142,13 @@ static void rpc_tsilo_dump(rpc_t *rpc, void *c) ntrans += 1; if (short_dump==0) { if (rpc_dump_transaction(rpc, c, ih, trans) == -1) { - unlock_entry(entry); + unlock_entry(&t_table->entries[i]); return; } } } } - unlock_entry(entry); + unlock_entry(&t_table->entries[i]); } /* extra attributes node */ _______________________________________________ sr-dev mailing list [email protected] http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
