Re: com php-src: Reduced memory realocations: ext/date/php_date.c ext/standard/basic_functions.c ext/standard/browscap.c ext/standard/dns.c
ext/standard/dns_win32.c

From: Date: Wed, 07 May 2014 09:16:03 +0000
Subject: Re: com php-src: Reduced memory realocations: ext/date/php_date.c ext/standard/basic_functions.c ext/standard/browscap.c ext/standard/dns.c
ext/standard/dns_win32.c
References: 1  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-78174@lists.php.net to get a copy of this message
On Tue, Apr 15, 2014 at 8:43 PM, Dmitry Stogov <dmitry@php.net> wrote: > Commit: 6cf5e51f3eab233d8694a9b1344eecc62ca0e1c0 > Author: Dmitry Stogov <dmitry@zend.com> Tue, 15 Apr 2014 22:43:18 +0400 > Parents: d0cc5c633c3eeaa61fe1108e74ba9c5941e580c0 > Branches: phpng > > Link: > http://git.php.net/?p=php-src.git;a=commitdiff;h=6cf5e51f3eab233d8694a9b1344eecc62ca0e1c0 > > Log: > Reduced memory realocations > > Changed paths: > M ext/date/php_date.c > M ext/standard/basic_functions.c > M ext/standard/browscap.c > M ext/standard/dns.c > M ext/standard/dns_win32.c > > > Diff: > diff --git a/ext/date/php_date.c b/ext/date/php_date.c > index 8009897..68084a2 100644 > --- a/ext/date/php_date.c > +++ b/ext/date/php_date.c > @@ -2204,17 +2204,15 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* > {{{ */ > ZVAL_STRING(&zv, dateobj->time->tz_info->name); > break; > case TIMELIB_ZONETYPE_OFFSET: { > - char *tmpstr = emalloc(sizeof("UTC+05:00")); > + zend_string *tmpstr = > STR_ALLOC(sizeof("UTC+05:00")-1, 0); > timelib_sll utc_offset = dateobj->time->z; > > - snprintf(tmpstr, sizeof("+05:00"), > "%c%02d:%02d", > + tmpstr->len = snprintf(tmpstr->val, > sizeof("+05:00"), "%c%02d:%02d", > utc_offset > 0 ? '-' : '+', > abs(utc_offset / 60), > abs((utc_offset % 60))); > > - // TODO: avoid reallocation ??? > - ZVAL_STRING(&zv, tmpstr); > - efree(tmpstr); > + ZVAL_STR(&zv, tmpstr); > } > break; > case TIMELIB_ZONETYPE_ABBR: > @@ -2299,16 +2297,14 @@ static HashTable *date_object_get_properties_timezone(zval *object > TSRMLS_DC) /* > ZVAL_STRING(&zv, tzobj->tzi.tz->name); > break; > case TIMELIB_ZONETYPE_OFFSET: { > - char *tmpstr = emalloc(sizeof("UTC+05:00")); > + zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); > > - snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", > + tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), > "%c%02d:%02d", > tzobj->tzi.utc_offset > 0 ? '-' : '+', > abs(tzobj->tzi.utc_offset / 60), > abs((tzobj->tzi.utc_offset % 60))); > > - // TODO: avoid reallocation ??? > - ZVAL_STRING(&zv, tmpstr); > - efree(tmpstr); > + ZVAL_STR(&zv, tmpstr); > } > break; > case TIMELIB_ZONETYPE_ABBR: > @@ -3736,18 +3732,15 @@ PHP_FUNCTION(timezone_name_get) > RETURN_STRING(tzobj->tzi.tz->name); > break; > case TIMELIB_ZONETYPE_OFFSET: { > - char *tmpstr = emalloc(sizeof("UTC+05:00")); > + zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); > timelib_sll utc_offset = tzobj->tzi.utc_offset; > > - snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", > + tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), > "%c%02d:%02d", > utc_offset > 0 ? '-' : '+', > abs(utc_offset / 60), > abs((utc_offset % 60))); > > - // TODO: avoid reallocation ??? > - RETVAL_STRING(tmpstr); > - efree(tmpstr); > - return; > + RETURN_STR(tmpstr); > } > break; > case TIMELIB_ZONETYPE_ABBR: > diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c > index 0dc9874..9d68788 100644 > --- a/ext/standard/basic_functions.c > +++ b/ext/standard/basic_functions.c > @@ -3806,7 +3806,6 @@ PHP_RSHUTDOWN_FUNCTION(basic) /* {{{ */ > setlocale(LC_CTYPE, ""); > zend_update_current_locale(); > } > -//??? STR_FREE(BG(locale_string)); > if (BG(locale_string)) { > efree(BG(locale_string)); > BG(locale_string) = NULL; > diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c > index 08a01d5..ef49ee4 100644 > --- a/ext/standard/browscap.c > +++ b/ext/standard/browscap.c > @@ -83,7 +83,6 @@ static void convert_browscap_pattern(zval *pattern, int persistent) /* {{{ */ > zend_string *res; > char *lc_pattern; > > - // TODO: overflow check??? > res = STR_SAFE_ALLOC(Z_STRLEN_P(pattern), 2, 4, persistent); > t = res->val; > > diff --git a/ext/standard/dns.c b/ext/standard/dns.c > index 2501a03..de0e24a 100644 > --- a/ext/standard/dns.c > +++ b/ext/standard/dns.c > @@ -506,24 +506,24 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int > type_to_fetch, int > { > int ll = 0; > zval entries; > + zend_string *tp; > > add_assoc_string(subarray, "type", "TXT"); > - tp = emalloc(dlen + 1); > + tp = STR_ALLOC(dlen, 0); > > array_init(&entries); > > while (ll < dlen) { > n = cp[ll]; > - memcpy(tp + ll , cp + ll + 1, n); > + memcpy(tp->val + ll , cp + ll + 1, n); > add_next_index_stringl(&entries, (char*)cp + ll + > 1, n); > ll = ll + n + 1; > } > - tp[dlen] = '\0'; > + tp->val[dlen] = '\0'; > + tp->len = dlen; > cp += dlen; > > - // TODO: avoid reallocation ??? > - add_assoc_stringl(subarray, "txt", (char*)tp, > (dlen>0)?dlen - 1:0); > - efree(tp); > + add_assoc_str(subarray, "txt", tp); > add_assoc_zval(subarray, "entries", &entries); > } > break; > diff --git a/ext/standard/dns_win32.c b/ext/standard/dns_win32.c > index 5fd0da0..4deed0b 100644 > --- a/ext/standard/dns_win32.c > +++ b/ext/standard/dns_win32.c > @@ -207,7 +207,8 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, int > raw, > DWORD i = 0; > DNS_TXT_DATA *data_txt = &pRec->Data.TXT; > DWORD count = data_txt->dwStringCount; > - char *txt, *txt_dst; > + zend_string *txt; > + char *txt_dst; > long txt_len = 0; > zval *entries; > > @@ -220,18 +221,16 @@ static void php_parserr(PDNS_RECORD pRec, int type_to_fetch, int store, > int raw, > txt_len += strlen(data_txt->pStringArray[i]) + 1; > } > > - txt = ecalloc(txt_len * 2, 1); > - txt_dst = txt; > + txt = STR_SAFE_ALLOC(txt_len, 2, 0, 0); > + txt_dst = txt->val; > for (i = 0; i < count; i++) { > int len = strlen(data_txt->pStringArray[i]); > memcpy(txt_dst, data_txt->pStringArray[i], len); > add_next_index_stringl(entries, > data_txt->pStringArray[i], len); > txt_dst += len; > } > - > - // TODO: avoid reallocation ??? > - add_assoc_string(*subarray, "txt", txt); > - efree(txt); > + tct->len = txt_dst - txt->val; > + add_assoc_str(*subarray, "txt", txt); To at least run nmake will be highly appreciated. You can always ping us if something needs a deeper look or fix :) Thanks for your work! Cheers, -- Pierre @pierrejoye | http://www.libgd.org

« previous php.cvs (#78174) next »