Re: [PATCH] more precise throughput using double [v3]
Alexander Malysh <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Vincent CHAVANIS schrieb: > great ! > > One more thing in Changelog > >> that changes throughput from interger > ^^ should read integer fixed as well, thanks ;) Thanks, Alex > > regards > > Vincent > > -- > Telemaque - NICE - (FR) > Service Technique - Developpement > http://www.telemaque.fr/ > [email protected] > Tel : +33 4 93 97 71 64 (fax 68) > > ----- Original Message ----- > From: "Alexander Malysh" <[email protected]> > To: <[email protected]> > Sent: Friday, April 07, 2006 6:37 PM > Subject: Re: [PATCH] more precise throughput using double [v3] > > >> oops, you are right... this patch committed to cvs: >> >> Index: gw/smscconn.c >> =================================================================== >> RCS file: /home/cvs/gateway/gw/smscconn.c,v >> retrieving revision 1.54 >> diff -a -u -p -r1.54 smscconn.c >> --- gw/smscconn.c 7 Apr 2006 12:49:50 -0000 1.54 >> +++ gw/smscconn.c 7 Apr 2006 16:35:33 -0000 >> @@ -151,7 +151,6 @@ SMSCConn *smscconn_create(CfgGroup *grp, >> SMSCConn *conn; >> Octstr *smsc_type; >> int ret; >> - double throughput; >> Octstr *allowed_smsc_id_regex; >> Octstr *denied_smsc_id_regex; >> Octstr *allowed_prefix_regex; >> @@ -218,10 +217,10 @@ SMSCConn *smscconn_create(CfgGroup *grp, >> panic(0, "Could not compile pattern '%s'", >> octstr_get_cstr(preferred_prefix_regex)); >> >> if ((tmp = cfg_get(grp, octstr_imm("throughput"))) != NULL) { >> - if (octstr_parse_double(&throughput, tmp, 0) == -1) >> + if (octstr_parse_double(&conn->throughput, tmp, 0) == -1) >> conn->throughput = 0; >> octstr_destroy(tmp); >> - info(0, "Set throughput to %.3f for smsc id <%s>", throughput, >> octstr_get_cstr(conn->id)); >> + info(0, "Set throughput to %.3f for smsc id <%s>", >> conn->throughput, octstr_get_cstr(conn->id)); >> } >> >> /* configure the internal rerouting rules for this smsc id */ >> >> >> Thanks, >> Alex >> >> Vincent CHAVANIS schrieb: >>> wow, something is going wrong with your modifications. >>> >>> Here is the fix, >>> >>> --- /gateway-cvs/gw/smscconn.c 2006-04-07 14:54:05.000000000 +0200 >>> +++ /gateway/gw/smscconn.c 2006-04-07 16:54:44.000000000 +0200 >>> @@ -220,8 +220,10 @@ >>> if ((tmp = cfg_get(grp, octstr_imm("throughput"))) != NULL) { >>> if (octstr_parse_double(&throughput, tmp, 0) == -1) >>> conn->throughput = 0; >>> + else >>> + conn->throughput = (double) throughput; >>> octstr_destroy(tmp); >>> - info(0, "Set throughput to %.3f for smsc id <%s>", throughput, octstr_get_cstr(conn->id)); >>> + info(0, "Set throughput to %.3f for smsc id <%s>", conn->throughput, octstr_get_cstr(conn->id)); >>> } >>> >>> Vincent >>> >>> -- >>> Telemaque - NICE - (FR) >>> Service Technique - Developpement >>> http://www.telemaque.fr/ >>> [email protected] >>> Tel : +33 4 93 97 71 64 (fax 68) >>> >>> ----- Original Message ----- >>> From: "Alexander Malysh" <[email protected]> >>> To: <[email protected]> >>> Sent: Friday, April 07, 2006 4:32 PM >>> Subject: Re: [PATCH] more precise throughput using double [v3] >>> >>> >>>> Vincent CHAVANIS schrieb: >>>>> Thanks++, >>>>> >>>>> I did not see that point. >>>> cfg_get(...) returns Octstr* that must be destroyed afterwards. and we >>>> avoid using strXXX functions if we have the same functionality in Octstr. >>>> >>>> Thanks, >>>> Alex >>>> >>>>> Vincent >>>>> >>>>> -- >>>>> Telemaque - NICE - (FR) >>>>> Service Technique - Developpement >>>>> http://www.telemaque.fr/ >>>>> [email protected] >>>>> Tel : +33 4 93 97 71 64 (fax 68) >>>>> >>>>> ----- Original Message ----- >>>>> From: "Alexander Malysh" <[email protected]> >>>>> To: <[email protected]> >>>>> Sent: Friday, April 07, 2006 2:51 PM >>>>> Subject: Re: [PATCH] more precise throughput using double [v3] >>>>> >>>>> >>>>>> Hi, >>>>>> >>>>>> this patch applies ok and committed to cvs in modified form. >>>>>> >>>>>>>> + throughput = strtod(octstr_get_cstr(cfg_get(grp, >>>>>> octstr_imm("throughput"))),(char **) NULL); >>>>>>>> + if (throughput == ERANGE || throughput <= 0) >>>>>>>> conn->throughput = 0; /* defaults to no throughtput >>>>>> ... >>>>>> >>>>>> Here you have memleak. Look into committed version where it's fixed. >>>>>> >>>>>> Thanks, >>>>>> Alex >>>>>> >>>>>> Vincent CHAVANIS schrieb: >>>>>>> is this new one is ok ? >>>>>>> >>>>>>> -- >>>>>>> Telemaque - NICE - (FR) >>>>>>> Service Technique - Developpement >>>>>>> http://www.telemaque.fr/ >>>>>>> [email protected] >>>>>>> Tel : +33 4 93 97 71 64 (fax 68) >>>>>>> >>>>>>> ----- Original Message ----- >>>>>>> From: "Alexander Malysh" <[email protected]> >>>>>>> To: <[email protected]> >>>>>>> Sent: Thursday, April 06, 2006 7:23 PM >>>>>>> Subject: Re: [PATCH] more precise throughput using double [v3] >>>>>>> >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> you patch doesn't apply. Please redo your patch with cvs -Nau from >>>>>>>> within gateway dir. >>>>>>>> >>>>>>>> Thanks, >>>>>>>> Alex >>>>>>>> >>>>>>>> ------------------------------------------------------------------------ >>>>>>>> >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smsc/smsc_emi.c gateway-patch/gw/smsc/smsc_emi.c >>>>>>>> --- gateway/gw/smsc/smsc_emi.c 2005-02-11 16:35:48.000000000 +0100 >>>>>>>> +++ gateway-patch/gw/smsc/smsc_emi.c 2006-04-06 19:42:24.000000000 +0200 >>>>>>>> @@ -992,7 +992,7 @@ >>>>>>>> Msg *msg; >>>>>>>> double delay = 0; >>>>>>>> >>>>>>>> - if (conn->throughput) { >>>>>>>> + if (conn->throughput > 0) { >>>>>>>> delay = 1.0 / conn->throughput; >>>>>>>> } >>>>>>>> >>>>>>>> @@ -1001,7 +1001,7 @@ >>>>>>>> (msg = gw_prioqueue_remove(PRIVDATA(conn)->outgoing_queue)) != NULL) { >>>>>>>> int nexttrn = emi2_next_trn(conn); >>>>>>>> >>>>>>>> - if (conn->throughput) >>>>>>>> + if (conn->throughput > 0) >>>>>>>> gwthread_sleep(delay); >>>>>>>> >>>>>>>> /* convert the generic Kannel message into an EMI type message */ >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smsc/smsc_fake.c gateway-patch/gw/smsc/smsc_fake.c >>>>>>>> --- gateway/gw/smsc/smsc_fake.c 2005-02-11 16:35:48.000000000 +0100 >>>>>>>> +++ gateway-patch/gw/smsc/smsc_fake.c 2006-04-06 19:42:38.000000000 +0200 >>>>>>>> @@ -243,7 +243,7 @@ >>>>>>>> Msg *msg; >>>>>>>> double delay = 0; >>>>>>>> >>>>>>>> - if (conn->throughput) { >>>>>>>> + if (conn->throughput > 0) { >>>>>>>> delay = 1.0 / conn->throughput; >>>>>>>> } >>>>>>>> >>>>>>>> @@ -297,7 +297,7 @@ >>>>>>>> } >>>>>>>> >>>>>>>> /* obey throughput speed limit, if any */ >>>>>>>> - if (conn->throughput) { >>>>>>>> + if (conn->throughput > 0) { >>>>>>>> gwthread_sleep(delay); >>>>>>>> } >>>>>>>> } >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smsc/smsc_http.c gateway-patch/gw/smsc/smsc_http.c >>>>>>>> --- gateway/gw/smsc/smsc_http.c 2006-03-29 11:17:55.000000000 +0200 >>>>>>>> +++ gateway-patch/gw/smsc/smsc_http.c 2006-04-06 19:43:00.000000000 +0200 >>>>>>>> @@ -1308,7 +1308,7 @@ >>>>>>>> Msg *sms = msg_duplicate(msg); >>>>>>>> double delay = 0; >>>>>>>> >>>>>>>> - if (conn->throughput) { >>>>>>>> + if (conn->throughput > 0) { >>>>>>>> delay = 1.0 / conn->throughput; >>>>>>>> } >>>>>>>> >>>>>>>> @@ -1316,7 +1316,7 @@ >>>>>>>> conndata->send_sms(conn, sms); >>>>>>>> >>>>>>>> /* obey throughput speed limit, if any */ >>>>>>>> - if (conn->throughput) >>>>>>>> + if (conn->throughput > 0) >>>>>>>> gwthread_sleep(delay); >>>>>>>> >>>>>>>> return 0; >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smsc/smsc_smasi.c gateway-patch/gw/smsc/smsc_smasi.c >>>>>>>> --- gateway/gw/smsc/smsc_smasi.c 2005-02-11 16:35:48.000000000 +0100 >>>>>>>> +++ gateway-patch/gw/smsc/smsc_smasi.c 2006-04-06 19:43:19.000000000 +0200 >>>>>>>> @@ -872,7 +872,7 @@ >>>>>>>> >>>>>>>> if (*pending_submits == -1) return; >>>>>>>> >>>>>>>> - if (smasi->conn->throughput) { >>>>>>>> + if (smasi->conn->throughput > 0) { >>>>>>>> delay = 1.0 / smasi->conn->throughput; >>>>>>>> } >>>>>>>> >>>>>>>> @@ -894,7 +894,7 @@ >>>>>>>> smasi_pdu_destroy(pdu); >>>>>>>> >>>>>>>> /* obey throughput speed limit, if any */ >>>>>>>> - if (smasi->conn->throughput) >>>>>>>> + if (smasi->conn->throughput > 0) >>>>>>>> gwthread_sleep(delay); >>>>>>>> >>>>>>>> ++(*pending_submits); >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smsc/smsc_smpp.c gateway-patch/gw/smsc/smsc_smpp.c >>>>>>>> --- gateway/gw/smsc/smsc_smpp.c 2006-02-07 15:54:44.000000000 +0100 >>>>>>>> +++ gateway-patch/gw/smsc/smsc_smpp.c 2006-04-06 19:44:14.000000000 +0200 >>>>>>>> @@ -1013,7 +1013,7 @@ >>>>>>>> /* >>>>>>>> * obey throughput speed limit, if any. >>>>>>>> */ >>>>>>>> - if (smpp->conn->throughput) >>>>>>>> + if (smpp->conn->throughput > 0) >>>>>>>> gwthread_sleep(delay); >>>>>>>> } >>>>>>>> else { /* write error occurs */ >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smscconn.c gateway-patch/gw/smscconn.c >>>>>>>> --- gateway/gw/smscconn.c 2006-04-01 19:48:51.000000000 +0200 >>>>>>>> +++ gateway-patch/gw/smscconn.c 2006-04-06 19:51:57.000000000 +0200 >>>>>>>> @@ -64,6 +64,7 @@ >>>>>>>> >>>>>>>> #include <signal.h> >>>>>>>> #include <time.h> >>>>>>>> +#include <errno.h> >>>>>>>> >>>>>>>> #include "gwlib/gwlib.h" >>>>>>>> #include "gwlib/regex.h" >>>>>>>> @@ -151,7 +152,7 @@ >>>>>>>> SMSCConn *conn; >>>>>>>> Octstr *smsc_type; >>>>>>>> int ret; >>>>>>>> - long throughput; >>>>>>>> + double throughput; >>>>>>>> Octstr *allowed_smsc_id_regex; >>>>>>>> Octstr *denied_smsc_id_regex; >>>>>>>> Octstr *allowed_prefix_regex; >>>>>>>> @@ -216,10 +217,13 @@ >>>>>>>> if ((conn->preferred_prefix_regex = gw_regex_comp(preferred_prefix_regex, REG_EXTENDED)) == NULL) >>>>>>>> panic(0, "Could not compile pattern '%s'", octstr_get_cstr(preferred_prefix_regex)); >>>>>>>> >>>>>>>> - if (cfg_get_integer(&throughput, grp, octstr_imm("throughput")) == -1) >>>>>>>> + throughput = strtod(octstr_get_cstr(cfg_get(grp, octstr_imm("throughput"))),(char **) NULL); >>>>>>>> + if (throughput == ERANGE || throughput <= 0) >>>>>>>> conn->throughput = 0; /* defaults to no throughtput limitation */ >>>>>>>> else >>>>>>>> - conn->throughput = (int) throughput; >>>>>>>> + conn->throughput = throughput; >>>>>>>> + >>>>>>>> + info(0, "Set throughput to %.3f for smsc id <%s>", throughput, octstr_get_cstr(conn->id)); >>>>>>>> >>>>>>>> /* configure the internal rerouting rules for this smsc id */ >>>>>>>> init_reroute(conn, grp); >>>>>>>> diff -i -E -b -w -B -rNau gateway/gw/smscconn_p.h gateway-patch/gw/smscconn_p.h >>>>>>>> --- gateway/gw/smscconn_p.h 2005-02-11 16:35:48.000000000 +0100 >>>>>>>> +++ gateway-patch/gw/smscconn_p.h 2006-04-06 19:46:51.000000000 +0200 >>>>>>>> @@ -194,7 +194,7 @@ >>>>>>>> >>>>>>>> int alt_dcs; /* use alternate DCS 0xFX */ >>>>>>>> >>>>>>>> - int throughput; /* message thoughput per sec. to be delivered to SMSC */ >>>>>>>> + double throughput; /* message thoughput per sec. to be delivered to SMSC */ >>>>>>>> >>>>>>>> /* Stores rerouting information for this specific smsc-id */ >>>>>>>> int reroute; /* simply turn MO into MT and process internally */ >>>>> >>>> >>> >>> >> >> > > >