Hi, I've been hunting a memory error in publish handling the last couple of days. The error is on our old but good 3.1.x presence server. Using memory debug, I located the memory leak in modules/presence/hash.c, function insert_phtable, line 492 (in trunk): p= (pres_entry_t*)shm_malloc(size);
As far I can see there are two errors when deleting publish htable entries 1. When calling delete_phtable pres.event->type is used instead of pres.event->evp->type 2. When creating publish hashtable, p->publ_count is not set. (defaults to 0) In delete_phtable, the following code is present p->publ_count--; if(p->publ_count== 0) p->publ_count is probably decremented to -1 (unless the user have two active dialogs) I attach a patch, which I would carefully test in a test environment :-) Regards, Kristian Høgh Uni-tel On Monday 12 January 2015 15:39:27 Nuno Reis wrote: > Hello all. > > I'm consistently watching a memory increase in kamailio when dealing with > PRESENCE events, namely SIP PUBLISH events. The system eventually hangs > running out of memory. > This behavior is seen at least in kamailio 4.1 and 4.2. I'm currently using > the latest stable 4.2.2. > If I disable the SIP PUBLISH handling in kamailio i don't observe the issue > anymore but as a side effect I don't have presence (name BLFs) also. > What do you think can be the right approach here? Should I open an issue in > github for this? Should I run kamailio under valgrind for some time? Are > there any other possible debug hints here? > Please find attached a code snippet with the presence related parts I'm > using right now. > Looking forward to hear from you. > > Best Regards, > > -- > > *Nuno Miguel Reis* | *Unified Communication** Systems* > M. +351 913907481 | nr...@wavecom.pt > WAVECOM-Soluções Rádio, S.A. > Cacia Park | Rua do Progresso, Lote 15 > 3800-639 AVEIRO | Portugal > T. +351 309 700 225 | F. +351 234 919 191 > *GPS > <http://maps.google.com/maps/ms?msa=0&msid=202333747613191340808.0004b4b227a6144f0df88> > | www.wavecom.pt <http://www.wavecom.pt/>** <http://www.wavecom.pt/>* > > [image: Description: Description: WavecomSignature] > <http://www.wavecom.pt/pt/wavecom/premios.php> > > [image: Publicity] <http://www.wavecom.pt/pt/mail_eventos.php>
diff --git a/modules/presence/hash.c b/modules/presence/hash.c index 6e85d37..3bc1f1c 100644 --- a/modules/presence/hash.c +++ b/modules/presence/hash.c @@ -544,6 +544,7 @@ int insert_phtable(str* pres_uri, int event, char* sphere) p->next= pres_htable[hash_code].entries->next; pres_htable[hash_code].entries->next= p; + p->publ_count=1; lock_release(&pres_htable[hash_code].lock); return 0; diff --git a/modules/presence/publish.c b/modules/presence/publish.c index 46ec334..dfe8f31 100644 --- a/modules/presence/publish.c +++ b/modules/presence/publish.c @@ -147,7 +147,7 @@ void msg_presentity_clean(unsigned int ticks,void *param) } /* delete from hash table */ - if(publ_cache_enabled && delete_phtable(&uri, pres.event->type)< 0) + if(publ_cache_enabled && delete_phtable(&uri, pres.event->evp->type)< 0) { LM_ERR("deleting from pres hash table\n"); goto error;
_______________________________________________ SIP Express Router (SER) and Kamailio (OpenSER) - sr-users mailing list sr-users@lists.sip-router.org http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users