Hi Aarno,
would you please explain???
RCS file: /home/cvs/gateway/gw/dlr.c,v
retrieving revision 1.43
diff -u -B -b -r1.43 dlr.c
--- gw/dlr.c 15 Nov 2003 13:14:23 -0000 1.43
+++ gw/dlr.c 26 Nov 2003 10:15:54 -0000
@@ -362,10 +362,11 @@
* NOTE: If typ is end status (e.g. DELIVERED) then dlr entry
* will be removed from DB.
*/
-Msg *dlr_find(const Octstr *smsc, const Octstr *ts, const Octstr *dst, int
typ)
+Msg *dlr_find(Octstr *smsc, const Octstr *ts, const Octstr *dst, int typ)
why not const here? With const we just tell the caller: "we do not modify your
arg."
{
Msg *msg = NULL;
struct dlr_entry *dlr = NULL;
+ Octstr *namos;
if(octstr_len(smsc) == 0) {
warning(0, "DLR[%s]: Can't find a dlr without smsc-id", dlr_type());
@@ -373,16 +374,19 @@
}
/* check if we have handler registered */
- if (handles == NULL || handles->dlr_get == NULL)
+ if (handles == NULL || handles->dlr_get == NULL) {
return NULL;
+ }
+ namos = octstr_duplicate(smsc);
why duplicate smsc Octstr here and then free it ??
if dlr entry is not found we just avoid memory allocation...
debug("dlr.dlr", 0, "DLR[%s]: Looking for DLR smsc=%s, ts=%s, dst=%s,
type=%d",
- dlr_type(), octstr_get_cstr(smsc),
octstr_get_cstr(ts), octstr_get_cstr(dst), typ);
+ dlr_type(), octstr_get_cstr(namos),
octstr_get_cstr(ts), octstr_get_cstr(dst), typ);
dlr = handles->dlr_get(smsc, ts, dst);
if (dlr == NULL) {
warning(0, "DLR[%s]: DLR for DST<%s> not found.",
dlr_type(), octstr_get_cstr(dst));
+ octstr_destroy(namos);
return NULL;
}
@@ -392,7 +396,7 @@
msg->sms.sms_type = report;
msg->sms.service = octstr_duplicate(dlr->service);
msg->sms.dlr_mask = typ;
- msg->sms.smsc_id = octstr_duplicate(dlr->smsc);
+ msg->sms.smsc_id = dlr->smsc;
msg->sms.receiver = octstr_duplicate(dlr->destination);
msg->sms.sender = octstr_duplicate(dlr->source);
/* if dlr_url was present, recode it here again */
@@ -414,6 +418,7 @@
} else {
debug("dlr.dlr", 0, "DLR[%s]: Ignoring DLR message because of mask
type=%d dlr->mask=%d", dlr_type(), typ, dlr->mask);
/* ok that was a status report but we where not interested in having
it */
+ dlr_entry_destroy(dlr);
why dlr_entry_destroy must be called here ???
see bellow... there we free that struct.
msg = NULL;
}
@@ -432,6 +437,7 @@
}
}
+ octstr_destroy(namos);
/* destroy struct dlr_entry */
dlr_entry_destroy(dlr);
The same agrs for dlr_mysq.c ...
On Wednesday 26 November 2003 11:53, Aarno Syv�nen wrote:
> Hi List,
>
> I attach cvs diff for fixing kannel leaks (as tested with our mmsc).
> There are new wrappers I used to find these leaks., too. And
> there was one unhandled NULL pointer.
>
> Perhaps you check & test these
--
Best regards / Mit besten Gr��en aus D�sseldorf
Dipl.-Ing.
Alexander Malysh
___________________________________________
Centrium GmbH
Vogelsanger Weg 80
40470 D�sseldorf
Fon: +49 (0211) 74 84 51 80
Fax: +49 (0211) 277 49 109
email: [EMAIL PROTECTED]
web: www.centrium.de
msn: [EMAIL PROTECTED]
icq: 98063111
___________________________________________
Please avoid sending me Word, Excel or PowerPoint attachments.
See http://www.fsf.org/philosophy/no-word-attachments.html