Module: kamailio Branch: master Commit: 98f9cace74adc33f42a6a6aca4d0adc1bcc81248 URL: https://github.com/kamailio/kamailio/commit/98f9cace74adc33f42a6a6aca4d0adc1...
Author: Daniel-Constantin Mierla miconda@gmail.com Committer: Daniel-Constantin Mierla miconda@gmail.com Date: 2016-11-03T14:31:16+01:00
dispatcher: replaced some fields init with memset to 0
- safer when adding new fields in structures
---
Modified: modules/dispatcher/dispatch.c Modified: modules/dispatcher/dispatch.h
---
Diff: https://github.com/kamailio/kamailio/commit/98f9cace74adc33f42a6a6aca4d0adc1... Patch: https://github.com/kamailio/kamailio/commit/98f9cace74adc33f42a6a6aca4d0adc1...
---
diff --git a/modules/dispatcher/dispatch.c b/modules/dispatcher/dispatch.c index e86c9c4..53b597d 100644 --- a/modules/dispatcher/dispatch.c +++ b/modules/dispatcher/dispatch.c @@ -206,7 +206,7 @@ int init_data(void) LM_ERR("Out of memory\n"); return -1; } - ds_lists[0] = ds_lists[1] = 0; + memset(ds_lists, 0, 2*sizeof(ds_set_t*));
p = (int*)shm_malloc(3*sizeof(int)); @@ -215,6 +215,7 @@ int init_data(void) LM_ERR("Out of memory\n"); return -1; } + memset(p, 0, 3*sizeof(int));
crt_idx = p; next_idx = p+1; @@ -588,10 +589,12 @@ int dp_init_weights(ds_set_t *dset) /*! \brief compact destinations from sets for fast access */ int reindex_dests( ds_set_t* node ) { + int i=0; + int j=0; + if ( !node ) return 0;
- int i=0; for( ;i<2;++i) { int rc = reindex_dests( node->next[i] ); @@ -599,8 +602,6 @@ int reindex_dests( ds_set_t* node ) return rc; }
- int j; - ds_dest_t *dp = NULL, *dp0= NULL;
dp0 = (ds_dest_t*)shm_malloc(node->nr*sizeof(ds_dest_t)); @@ -3029,18 +3030,18 @@ ds_set_t* ds_avl_find( ds_set_t* node, int id ) */ void ds_avl_destroy( ds_set_t** node_ptr ) { + ds_set_t *node=NULL; + ds_dest_t *dest=NULL; + int i=0;
if ( !node_ptr || !(*node_ptr) ) return;
- ds_set_t* node = *node_ptr; + node = *node_ptr;
- int i=0; for( ;i<2;++i) ds_avl_destroy( &node->next[i] );
- ds_dest_t *dest = NULL; - for(dest = node->dlist; dest!= NULL; dest=dest->next) { if(dest->uri.s!=NULL) @@ -3062,8 +3063,12 @@ static void avl_rebalance( ds_set_t** path_top, int target );
ds_set_t* ds_avl_insert( ds_set_t** root, int id, int* setn ) { - ds_set_t** rotation_top = root; - ds_set_t* node = *root; + ds_set_t** rotation_top; + ds_set_t* node; + + rotation_top = root; + node = *root; + while (node && id != node->id) { int next_step = (id > node->id); if (!AVL_BALANCED(node)) rotation_top = root; @@ -3072,8 +3077,8 @@ ds_set_t* ds_avl_insert( ds_set_t** root, int id, int* setn ) } if (!node) { - node = shm_malloc(sizeof(*node)); - node->next[0] = node->next[1] = NULL; + node = shm_malloc(sizeof(ds_set_t)); + memset(node, 0, sizeof(ds_set_t)); node->id = id; node->longer = AVL_NEITHER; *root = node; @@ -3102,6 +3107,7 @@ static void avl_rebalance_path( ds_set_t* path, int id ) static ds_set_t* avl_rotate_2( ds_set_t** path_top, int dir ) { ds_set_t *B, *C, *D, *E; + B = *path_top; D = B->next[dir]; C = D->next[1-dir]; @@ -3111,12 +3117,14 @@ static ds_set_t* avl_rotate_2( ds_set_t** path_top, int dir ) B->next[dir] = C; B->longer = AVL_NEITHER; D->longer = AVL_NEITHER; + return E; }
static ds_set_t* avl_rotate_3( ds_set_t** path_top, int dir, int third ) { ds_set_t *B, *F, *D, *C, *E; + B = *path_top; F = B->next[dir]; D = F->next[1-dir]; @@ -3149,8 +3157,11 @@ static ds_set_t* avl_rotate_3( ds_set_t** path_top, int dir, int third )
static void avl_rebalance( ds_set_t** path_top, int id ) { - ds_set_t* path = *path_top; + ds_set_t* path; int first, second, third; + + path = *path_top; + if (AVL_BALANCED(path)) { avl_rebalance_path(path, id); return; diff --git a/modules/dispatcher/dispatch.h b/modules/dispatcher/dispatch.h index cbe965a..dedc6b5 100644 --- a/modules/dispatcher/dispatch.h +++ b/modules/dispatcher/dispatch.h @@ -180,7 +180,7 @@ typedef struct _ds_set unsigned int wlist[100]; unsigned int rwlist[100]; struct _ds_set *next[2]; - int longer:2; + int longer; } ds_set_t; #define AVL_LEFT 0 #define AVL_RIGHT 1