Module: kamailio Branch: master Commit: 8ae2713477027a229ae4ee7045557151e467aff3 URL: https://github.com/kamailio/kamailio/commit/8ae2713477027a229ae4ee7045557151...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2016-03-14T11:44:34+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
---
Modified: modules/tsilo/ts_rpc.c
---
Diff: https://github.com/kamailio/kamailio/commit/8ae2713477027a229ae4ee7045557151... Patch: https://github.com/kamailio/kamailio/commit/8ae2713477027a229ae4ee7045557151...
---
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 */