ID:               47351
 Comment by:       tobias dot john at fondsnet dot de
 Reported By:      tobias dot john at fondsnet dot de
 Status:           Assigned
 Bug Type:         Date/time related
 Operating System: *
 PHP Version:      5.*, 6CVS (2009-05-11)
 Assigned To:      derick
 New Comment:

Bug still not fixed in PHP 5.3.0 release.


Previous Comments:
------------------------------------------------------------------------

[2009-06-22 12:07:53] tobias dot john at fondsnet dot de

Sorry the previous post was the RC3 patch. Here is RC4.

--- php-5.3.0RC4.orig/ext/date/php_date.c       2009-06-17 19:56:17.000000000
+0200
+++ php-5.3.0RC4/ext/date/php_date.c    2009-06-22 13:57:49.000000000
+0200
@@ -2405,7 +2405,7 @@
        }
        timelib_unixtime2local(now, (timelib_sll) time(NULL));
 
-       timelib_fill_holes(dateobj->time, now, 0);
+       timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE);
        timelib_update_ts(dateobj->time, tzi);
 
        dateobj->time->have_relative = 0;

------------------------------------------------------------------------

[2009-06-22 12:05:10] tobias dot john at fondsnet dot de

Here is the patch for RC4. It would be nice if this makes it in before
final, because this bug basically makes \DateTime more or less unuseable
in longer running processes and processes that create and destroy many
DateTime objects (like imports).

--- php-5.3.0RC3.orig/ext/date/php_date.c       2009-05-31 23:28:38.000000000
+0200
+++ php-5.3.0RC3/ext/date/php_date.c    2009-06-15 09:28:03.000000000
+0200
@@ -2401,7 +2401,7 @@
        }
        timelib_unixtime2local(now, (timelib_sll) time(NULL));
 
-       timelib_fill_holes(dateobj->time, now, 0);
+       timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE);
        timelib_update_ts(dateobj->time, tzi);
 
        dateobj->time->have_relative = 0;

------------------------------------------------------------------------

[2009-05-07 10:06:27] tobias dot john at fondsnet dot de

I use this patch for 5.3.0RC1.

--- php-5.3.0RC1/ext/date/php_date.c    2009-01-27 14:48:10.000000000
+0100
+++ php-5.3.0RC1patched/ext/date/php_date.c     2009-05-07
10:54:48.000000000 +0200
@@ -2362,7 +2362,7 @@
        }
        timelib_unixtime2local(now, (timelib_sll) time(NULL));
 
-       timelib_fill_holes(dateobj->time, now, 0);
+       timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE);
        timelib_update_ts(dateobj->time, tzi);
 
        dateobj->time->have_relative = 0;

------------------------------------------------------------------------

[2009-03-11 15:29:23] bloudon at townnews dot com

This patch against 5.2.9 seems to be working out for us so far:

--- ext/date/php_date.orig.c    2009-03-10 15:02:40.000000000 -0500
+++ ext/date/php_date.c 2009-03-10 15:02:57.000000000 -0500
@@ -1737,7 +1737,7 @@
    }
    timelib_unixtime2local(now, (timelib_sll) time(NULL));

-   timelib_fill_holes(dateobj->time, now, 0);
+   timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE);
    timelib_update_ts(dateobj->time, tzi);

    dateobj->time->have_weekday_relative = dateobj->time->have_relative
= 0;

------------------------------------------------------------------------

[2009-03-05 17:39:39] bloudon at townnews dot com

Same bug found in PHP versions 5.2.8 and 5.2.9 on Linux.

-----

Test code:

for ( $i = 0; $i < 100; $i++ ) {
    $d = new DateTime();
    unset($d);
}

-----

valgrind --leak-check=yes php test.php:

==20642== 235 bytes in 1 blocks are possibly lost in loss record 4 of
12
==20642==    at 0x40203C0: malloc (vg_replace_malloc.c:149)
==20642==    by 0x80AB486: timelib_tzinfo_clone (in /usr/bin/php)
==20642==    by 0x8097FD3: timelib_fill_holes (in /usr/bin/php)
==20642==    by 0x8095535: (within /usr/bin/php)
==20642==    by 0x8095605: zim_DateTime___construct (in /usr/bin/php)
==20642==    by 0x817D834: (within /usr/bin/php)
==20642==    by 0x819ED4F: execute (in /usr/bin/php)
==20642==    by 0x8166F25: zend_execute_scripts (in /usr/bin/php)
==20642==    by 0x813862F: php_execute_script (in /usr/bin/php)
==20642==    by 0x81A7178: main (in /usr/bin/php)
==20642==
==20642==
==20642== 2,820 bytes in 3 blocks are possibly lost in loss record 8 of
12
==20642==    at 0x40203C0: malloc (vg_replace_malloc.c:149)
==20642==    by 0x80AB47A: timelib_tzinfo_clone (in /usr/bin/php)
==20642==    by 0x8097FD3: timelib_fill_holes (in /usr/bin/php)
==20642==    by 0x8095535: (within /usr/bin/php)
==20642==    by 0x8095605: zim_DateTime___construct (in /usr/bin/php)
==20642==    by 0x817D834: (within /usr/bin/php)
==20642==    by 0x819ED4F: execute (in /usr/bin/php)
==20642==    by 0x8166F25: zend_execute_scripts (in /usr/bin/php)
==20642==    by 0x813862F: php_execute_script (in /usr/bin/php)
==20642==    by 0x81A7178: main (in /usr/bin/php)
==20642==
==20642==
==20642== 132,845 (4,800 direct, 128,045 indirect) bytes in 100 blocks
are definitely lost in loss record 9 of 12
==20642==    at 0x401F6FF: calloc (vg_replace_malloc.c:279)
==20642==    by 0x80AB420: timelib_tzinfo_ctor (in /usr/bin/php)
==20642==    by 0x80AB446: timelib_tzinfo_clone (in /usr/bin/php)
==20642==    by 0x8097FD3: timelib_fill_holes (in /usr/bin/php)
==20642==    by 0x8095535: (within /usr/bin/php)
==20642==    by 0x8095605: zim_DateTime___construct (in /usr/bin/php)
==20642==    by 0x817D834: (within /usr/bin/php)
==20642==    by 0x819ED4F: execute (in /usr/bin/php)
==20642==    by 0x8166F25: zend_execute_scripts (in /usr/bin/php)
==20642==    by 0x813862F: php_execute_script (in /usr/bin/php)
==20642==    by 0x81A7178: main (in /usr/bin/php)

-----

Setting a default time zone through date_default_timezone_set() or
putenv() changes the leak to:

==20819== 7,600 (4,800 direct, 2,800 indirect) bytes in 100 blocks are
definitely lost in loss record 10 of 10
==20819==    at 0x401F6FF: calloc (vg_replace_malloc.c:279)
==20819==    by 0x80AB420: timelib_tzinfo_ctor (in /usr/bin/php)
==20819==    by 0x80AB446: timelib_tzinfo_clone (in /usr/bin/php)
==20819==    by 0x8097FD3: timelib_fill_holes (in /usr/bin/php)
==20819==    by 0x8095535: (within /usr/bin/php)
==20819==    by 0x8095605: zim_DateTime___construct (in /usr/bin/php)
==20819==    by 0x817D834: (within /usr/bin/php)
==20819==    by 0x819ED4F: execute (in /usr/bin/php)
==20819==    by 0x8166F25: zend_execute_scripts (in /usr/bin/php)
==20819==    by 0x813862F: php_execute_script (in /usr/bin/php)
==20819==    by 0x81A7178: main (in /usr/bin/php)

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/47351

-- 
Edit this bug report at http://bugs.php.net/?id=47351&edit=1

Reply via email to