new mavl is working now

FossilOrigin-Name: 65a4eefffea57509c0d7fd573e53b15bf4a730ce297b7db182aaac796ea92448
This commit is contained in:
7u83@mail.ru
2018-03-10 23:56:41 +00:00
parent e4d65ef470
commit 4171d208d0
79 changed files with 1296 additions and 1112 deletions

View File

@ -37,110 +37,109 @@
static int cmp_by_addr(const mavldata_t * d1,const mavldata_t *d2)
static int cmp_by_addr ( const void * d1, const void *d2 )
{
struct conn * c1=(struct conn *) d1->ptr;
struct conn * c2=(struct conn *) d2->ptr;
return sock_cmpaddr((struct sockaddr*)&c1->addr,(struct sockaddr*)&c2->addr,1);
struct conn * c1 = * ( void ** ) d1 ;
struct conn * c2 = * ( void ** ) d2 ;
return sock_cmpaddr ( ( struct sockaddr* ) &c1->addr, ( struct sockaddr* ) &c2->addr, 1 );
}
static int cmp_by_session_id(const mavldata_t *d1, const mavldata_t *d2)
static int cmp_by_session_id ( const void *d1, const void *d2 )
{
struct conn * c1=(struct conn *) d1->ptr;
struct conn * c2=(struct conn *) d2->ptr;
return memcmp(c1->session_id,c2->session_id,16);
struct conn * c1 = *( void ** ) d1;
struct conn * c2 = *( void ** ) d2;
return memcmp ( c1->session_id, c2->session_id, 16 );
}
struct connlist * connlist_create(int len)
struct connlist * connlist_create ( int len )
{
struct connlist * cl = malloc(sizeof(struct connlist));
if (!cl)
struct connlist * cl = malloc ( sizeof ( struct connlist ) );
if ( !cl )
return 0;
cl->by_addr = mavl_create(cmp_by_addr,0);
if (!cl->by_addr){
free(cl);
cl->by_addr = mavl_create_ptr ( cmp_by_addr, NULL );
if ( !cl->by_addr ) {
free ( cl );
return 0;
}
cl->by_session_id = mavl_create(cmp_by_session_id,0);
if (pthread_mutex_init(&cl->connlist_mutex,NULL)){
mavl_destroy(cl->by_addr);
free(cl);
cl->by_session_id = mavl_create_ptr ( cmp_by_session_id, NULL );
if ( pthread_mutex_init ( &cl->connlist_mutex, NULL ) ) {
mavl_destroy ( cl->by_addr );
free ( cl );
return 0;
};
cl->len=len;
cl->len = len;
return cl;
}
void connlist_lock(struct connlist * cl)
void connlist_lock ( struct connlist * cl )
{
pthread_mutex_lock(&cl->connlist_mutex);
pthread_mutex_lock ( &cl->connlist_mutex );
}
void connlist_unlock(struct connlist * cl)
void connlist_unlock ( struct connlist * cl )
{
pthread_mutex_unlock(&cl->connlist_mutex);
pthread_mutex_unlock ( &cl->connlist_mutex );
}
void connlist_destroy(struct connlist * cl)
void connlist_destroy ( struct connlist * cl )
{
if (!cl)
if ( !cl )
return;
if (cl->by_addr)
mavl_destroy(cl->by_addr);
pthread_mutex_destroy(&cl->connlist_mutex);
free(cl);
if ( cl->by_addr )
mavl_destroy ( cl->by_addr );
pthread_mutex_destroy ( &cl->connlist_mutex );
free ( cl );
}
struct conn * connlist_get(struct connlist * cl, const struct sockaddr * addr)
struct conn * connlist_get ( struct connlist * cl, const struct sockaddr * addr )
{
struct conn search;
sock_copyaddr(&search.addr,addr);
return mavl_get_ptr(cl->by_addr,&search);
sock_copyaddr ( &search.addr, addr );
return mavl_get_ptr ( cl->by_addr, &search );
}
struct conn * connlist_add(struct connlist * cl, struct conn * conn)
struct conn * connlist_add ( struct connlist * cl, struct conn * conn )
{
if ( cl->len!=0)
if (cl->by_addr->count>=cl->len)
if ( cl->len != 0 )
if ( cl->by_addr->count >= cl->len )
return NULL;
conn->connlist=cl;
return mavl_add_ptr(cl->by_addr,conn);
conn->connlist = cl;
return mavl_add_ptr ( cl->by_addr, conn );
}
struct conn * connlist_get_by_session_id(struct connlist *cl, struct conn * conn)
struct conn * connlist_get_by_session_id ( struct connlist *cl, struct conn * conn )
{
return mavl_get_ptr(cl->by_session_id,conn);
return mavl_get_ptr ( cl->by_session_id, conn );
}
struct conn * connlist_add_by_session_id(struct connlist * cl, struct conn * conn)
struct conn * connlist_add_by_session_id ( struct connlist * cl, struct conn * conn )
{
return mavl_add_ptr(cl->by_session_id,conn);
return mavl_add_ptr ( cl->by_session_id, conn );
}
void connlist_remove(struct connlist *cl,struct conn * conn)
void connlist_remove ( struct connlist *cl, struct conn * conn )
{
mavldata_t md;
md.ptr=conn;
mavl_del(cl->by_session_id,&md);
md.ptr=conn;
mavl_del(cl->by_addr,&md);
void * md;
md = conn;
mavl_del ( cl->by_session_id, &md );
md = conn;
mavl_del ( cl->by_addr, &md );
}