From 77aac6dc1b94bb2ed0dd7a0c1c9a00aac3a2c10e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?IOhannes=20m=20zm=C3=B6lnig?= Date: Mon, 23 Aug 2010 12:46:59 +0000 Subject: use malloc() rather than getbytes(); use pthread_exit(); svn path=/trunk/externals/iem/iemnet/; revision=13888 --- iemnet.c | 4 ++-- iemnet_data.c | 53 +++++++++++++++++------------------------------------ iemnet_receiver.c | 6 ++++-- iemnet_sender.c | 5 +++-- udpserver.c | 11 ++++++----- 5 files changed, 32 insertions(+), 47 deletions(-) diff --git a/iemnet.c b/iemnet.c index 8e95384..fb97a61 100644 --- a/iemnet.c +++ b/iemnet.c @@ -5,7 +5,7 @@ //#define DEBUG #include "iemnet.h" - +#include void iemnet__addrout(t_outlet*status_outlet, t_outlet*address_outlet, long address, unsigned short port) { @@ -76,7 +76,7 @@ static int iemnet__nametaken(const char*namestring) { } // new name! - curname=(t_iemnet_names*)getbytes(sizeof(t_iemnet_names)); + curname=(t_iemnet_names*)malloc(sizeof(t_iemnet_names)); curname->name=name; curname->next=0; diff --git a/iemnet_data.c b/iemnet_data.c index e671d7d..7ccc5b0 100644 --- a/iemnet_data.c +++ b/iemnet_data.c @@ -11,6 +11,8 @@ #include "iemnet.h" #include "iemnet_data.h" +#include + #include #include @@ -36,19 +38,19 @@ t_iemnet_floatlist*iemnet__floatlist_init(t_iemnet_floatlist*cl) { void iemnet__floatlist_destroy(t_iemnet_floatlist*cl) { if(NULL==cl)return; - if(cl->argv) freebytes(cl->argv, sizeof(t_atom)*cl->size); + if(cl->argv) free(cl->argv); cl->argv=NULL; cl->argc=0; cl->size=0; - freebytes(cl, sizeof(t_iemnet_floatlist)); + free(cl); } t_iemnet_floatlist*iemnet__floatlist_create(unsigned int size) { - t_iemnet_floatlist*result=(t_iemnet_floatlist*)getbytes(sizeof(t_iemnet_floatlist)); + t_iemnet_floatlist*result=(t_iemnet_floatlist*)malloc(sizeof(t_iemnet_floatlist)); if(NULL==result)return NULL; - result->argv = (t_atom*)getbytes(size*sizeof(t_atom)); + result->argv = (t_atom*)malloc(size*sizeof(t_atom)); if(NULL==result->argv) { iemnet__floatlist_destroy(result); return NULL; @@ -73,10 +75,10 @@ t_iemnet_floatlist*iemnet__floatlist_resize(t_iemnet_floatlist*cl, unsigned int return cl; } - tmp=(t_atom*)getbytes(size*sizeof(t_atom)); + tmp=(t_atom*)malloc(size*sizeof(t_atom)); if(NULL==tmp) return NULL; - freebytes(cl->argv, sizeof(t_atom)*cl->size); + free(cl->argv); cl->argv=tmp; cl->argc=cl->size=size; @@ -89,19 +91,19 @@ t_iemnet_floatlist*iemnet__floatlist_resize(t_iemnet_floatlist*cl, unsigned int void iemnet__chunk_destroy(t_iemnet_chunk*c) { if(NULL==c)return; - if(c->data)freebytes(c->data, c->size*sizeof(unsigned char)); + if(c->data)free(c->data); c->data=NULL; c->size=0; - freebytes(c, sizeof(t_iemnet_chunk)); + free(c); } t_iemnet_chunk* iemnet__chunk_create_empty(int size) { - t_iemnet_chunk*result=(t_iemnet_chunk*)getbytes(sizeof(t_iemnet_chunk)); + t_iemnet_chunk*result=(t_iemnet_chunk*)malloc(sizeof(t_iemnet_chunk)); if(result) { result->size=size; - result->data=(unsigned char*)getbytes(sizeof(unsigned char)*size); + result->data=(unsigned char*)malloc(sizeof(unsigned char)*size); if(NULL == result->data) { result->size=0; @@ -220,7 +222,7 @@ int queue_push( if(NULL == data) return size; - n=(t_node*)getbytes(sizeof(t_node)); + n=(t_node*)malloc(sizeof(t_node)); n->next = 0; n->data = data; @@ -258,7 +260,6 @@ t_iemnet_chunk* queue_pop_block( if(NULL == _this)return NULL; pthread_mutex_lock(&_this->mtx); -#if 1 /* if the queue is empty, wait */ if(NULL == _this->head) { @@ -283,30 +284,10 @@ t_iemnet_chunk* queue_pop_block( } pthread_mutex_unlock(&_this->mtx); -#else - /* wait until there is something in the queue or the "done" flag is set */ - while (! (head = _this->head)) { - if(_this->done) { - pthread_mutex_unlock(&_this->mtx); - return NULL; - } else { - pthread_cond_wait(&_this->cond, &_this->mtx); - } - } - - if (! (_this->head = head->next)) { - _this->tail = 0; - } - if(head && head->data) { - _this->size-=head->data->size; - } - - pthread_mutex_unlock(&_this->mtx); -#endif if(head) { data=head->data; - freebytes(head, sizeof(t_node)); + free(head); head=NULL; } return data; @@ -340,7 +321,7 @@ t_iemnet_chunk* queue_pop_noblock( if(head) { data=head->data; - freebytes(head, sizeof(t_node)); + free(head); head=NULL; } return data; @@ -391,7 +372,7 @@ void queue_destroy(t_iemnet_queue* q) { pthread_mutex_destroy(&q->mtx); pthread_cond_destroy(&q->cond); - freebytes(q, sizeof(t_iemnet_queue)); + free(q); q=NULL; DEBUG("queue destroyed %x", q); } @@ -400,7 +381,7 @@ t_iemnet_queue* queue_create(void) { static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t cond = PTHREAD_COND_INITIALIZER; - t_iemnet_queue*q=(t_iemnet_queue*)getbytes(sizeof(t_iemnet_queue)); + t_iemnet_queue*q=(t_iemnet_queue*)malloc(sizeof(t_iemnet_queue)); DEBUG("queue create %x", q); if(NULL==q)return NULL; diff --git a/iemnet_receiver.c b/iemnet_receiver.c index 3121e32..3a7ba41 100644 --- a/iemnet_receiver.c +++ b/iemnet_receiver.c @@ -9,6 +9,7 @@ #include #include +#include #include #include @@ -89,6 +90,7 @@ static void*iemnet__receiver_readthread(void*arg) { receiver->running=0; //fprintf(stderr, "read thread terminated\n"); + pthread_exit(NULL); return NULL; } @@ -129,7 +131,7 @@ int iemnet__receiver_getsize(t_iemnet_receiver*x) { t_iemnet_receiver*iemnet__receiver_create(int sock, void*userdata, t_iemnet_receivecallback callback) { static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; - t_iemnet_receiver*rec=(t_iemnet_receiver*)getbytes(sizeof(t_iemnet_receiver)); + t_iemnet_receiver*rec=(t_iemnet_receiver*)malloc(sizeof(t_iemnet_receiver)); DEBUG("create new receiver for 0x%X:%d", userdata, sock); //fprintf(stderr, "new receiver for %d\t%x\t%x\n", sock, userdata, callback); if(rec) { @@ -203,7 +205,7 @@ void iemnet__receiver_destroy(t_iemnet_receiver*rec) { rec->callback=NULL; rec->queue=NULL; - freebytes(rec, sizeof(t_iemnet_receiver)); + free(rec); rec=NULL; DEBUG("[%d] destroyed receiver", inst); } diff --git a/iemnet_sender.c b/iemnet_sender.c index bdbc26d..ef2b70a 100644 --- a/iemnet_sender.c +++ b/iemnet_sender.c @@ -15,6 +15,7 @@ #include #include +#include #include #include @@ -159,7 +160,7 @@ void iemnet__sender_destroy(t_iemnet_sender*s) { pthread_mutex_destroy (&s->mtx); memset(s, 0, sizeof(t_iemnet_sender)); - freebytes(s, sizeof(t_iemnet_sender)); + free(s); s=NULL; DEBUG("destroyed sender"); } @@ -167,7 +168,7 @@ void iemnet__sender_destroy(t_iemnet_sender*s) { t_iemnet_sender*iemnet__sender_create(int sock) { static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; - t_iemnet_sender*result=(t_iemnet_sender*)getbytes(sizeof(t_iemnet_sender)); + t_iemnet_sender*result=(t_iemnet_sender*)malloc(sizeof(t_iemnet_sender)); int res=0; DEBUG("create sender %x", result); if(NULL==result){ diff --git a/udpserver.c b/udpserver.c index 95324d0..4bf6dee 100644 --- a/udpserver.c +++ b/udpserver.c @@ -27,6 +27,7 @@ //#define DEBUG #include "iemnet.h" #include +#include #define MAX_CONNECT 32 /* maximum number of connections */ @@ -69,7 +70,7 @@ typedef struct _udpserver static t_udpserver_sender *udpserver_sender_new(t_udpserver *owner, unsigned long host, unsigned short port) { - t_udpserver_sender *x = (t_udpserver_sender *)getbytes(sizeof(*x)); + t_udpserver_sender *x = (t_udpserver_sender *)malloc(sizeof(t_udpserver_sender)); if(NULL==x) { error("%s_sender: unable to allocate %d bytes", objName, sizeof(*x)); return NULL; @@ -100,7 +101,7 @@ static void udpserver_sender_free(t_udpserver_sender *x) x->sr_fd=-1; - freebytes(x, sizeof(*x)); + free(x); if(sender) iemnet__sender_destroy(sender); @@ -551,7 +552,7 @@ static void udpserver_receive_callback(void *y, t_iemnet_chunk*c) { /* here we might have a reentrancy problem */ if(conns!=x->x_nconnections) { - outlet_float(x->x_connectout, x->x_nconnections); + outlet_float(x->x_connectout, x->x_nconnections); } outlet_list(x->x_msgout, gensym("list"), x->x_floatlist->argc, x->x_floatlist->argv); } @@ -612,7 +613,7 @@ static void udpserver_port(t_udpserver*x, t_floatarg fportno) /* cleanup any open ports */ if(sockfd>=0) { - sys_rmpollfn(sockfd); + //sys_rmpollfn(sockfd); sys_closesocket(sockfd); x->x_connectsocket=-1; x->x_port=-1; @@ -702,7 +703,7 @@ static void udpserver_free(t_udpserver *x) } if (x->x_connectsocket >= 0) { - sys_rmpollfn(x->x_connectsocket); + //sys_rmpollfn(x->x_connectsocket); sys_closesocket(x->x_connectsocket); } if(x->x_floatlist)iemnet__floatlist_destroy(x->x_floatlist);x->x_floatlist=NULL; -- cgit v1.2.1