Valgrinding shared modules
Over the past year I've been writing various commercial (more about that later) and open source PHP extensions (such as QuickHash, more about that later too). Most of the time they are shared extensions that are not part of PHP. While testing whether I correctly free all memory with Valgrind, I ran into the issue where I couldn't see the stack frames of where the memory leaks occurred in the extensions, and once I even ran into a Valgrind bug. The reason why Valgrind could not show the function names belonging to the stack frames is because PHP had already unloaded the shared extensions from memory.
I often found myself compiling the extensions into PHP statically so that there was nothing to unload for PHP, but that was becoming annoying. So instead I added a patch to PHP that prevents the shutdown sequence from actually unloading the modules. You can trigger this behaviour by setting the ZEND_DONT_UNLOAD_MODULES environment variable before running your script:
# export ZEND_DONT_UNLOAD_MODULES=1 # valgrind --leak-check=full --show-reachable=yes php -r 'echo "Hello World\n";'
Without ZEND_DONT_UNLOAD_MODULES exported, my Valgrind output shows a block like:
# unset ZEND_DONT_UNLOAD_MODULES # valgrind --leak-check=full --show-reachable=yes php -r 'echo "Hello World\n";' ... ==25829== 8 bytes in 1 blocks are indirectly lost in loss record 2 of 21 ==25829== at 0x4C25E84: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==25829== by 0xCE440DC: ??? ==25829== by 0xCE44316: ??? ==25829== by 0xCE44368: ??? ==25829== by 0xCBEE55F: ??? ==25829== by 0xCBD3F87: ??? ==25829== by 0x949A85: zend_activate_modules (zend_API.c:2285) ==25829== by 0x8B5EBC: php_request_startup (main.c:1491) ==25829== by 0xA83D60: do_cli (php_cli.c:954) ==25829== by 0xA84F7B: main (php_cli.c:1356) ...
And with ZEND_DONT_UNLOAD_MODULES exported, it shows instead:
# export ZEND_DONT_UNLOAD_MODULES=1 # valgrind --leak-check=full --show-reachable=yes php -r 'echo "Hello World\n";' ... ==25824== 8 bytes in 1 blocks are still reachable in loss record 2 of 30 ==25824== at 0x4C25E84: calloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==25824== by 0xCE440DC: event_base_priority_init (in /usr/lib/libevent-1.4.so.2.1.3) ==25824== by 0xCE44316: event_base_new (in /usr/lib/libevent-1.4.so.2.1.3) ==25824== by 0xCE44368: event_init (in /usr/lib/libevent-1.4.so.2.1.3) ==25824== by 0xCBEE55F: zm_activate_http_request_pool (http_request_pool_api.c:58) ==25824== by 0xCBD3F87: zm_activate_http (http.c:373) ==25824== by 0x949A85: zend_activate_modules (zend_API.c:2285) ==25824== by 0x8B5EBC: php_request_startup (main.c:1491) ==25824== by 0xA83D60: do_cli (php_cli.c:954) ==25824== by 0xA84F7B: main (php_cli.c:1356) ...
As you can see all the symbols are now nicely resolved. This patch is part of the upcoming PHP 5.4, but applies to PHP 5.2 and PHP 5.3 as well.
Life Line
Updated a restaurant
Created a bench
Updated a cafe
But I think my favourite photo was of this Carrion Crow in flight.
The new birds I saw, were mostly too far away to get good photos.
But I saw my first Spoonbill, Corn Bunting, and a flock of Black-tailed Godwits.
I had a lovely walk around RSPB Bowers Marsh yesterday, where I saw some expected birds, and a bunch of new species.
When I got there, there was this welcome committee of Starlings.
#BirdPhotography #nature #BirdsOfFediverse #Birds #Photography #RSPB
RSPB Bowers Marsh
Created 2 benches
I hiked 11.3km in 3h31m08s
Updated a pub
Updated a pub
Updated 4 pubs; Confirmed a pub
Created a restaurant
I walked 0.8km in 9m31s
I walked 2.1km in 16m42s
I walked 4.7km in 48m42s
I walked 7.4km in 1h16m10s
Updated a fast_food
Updated a cafe, a pet shop, and a bench; Confirmed a cafe, a convenience shop, and a motorcycle_repair shop
I walked 5.0km in 1h2m27s
I walked 1.1km in 10m08s
Updated a cafe; Confirmed 3 convenience shops, a fast_food, and a laundry shop
Created a fitness_centre; Updated an event_caterer office and a social_facility; Confirmed a restaurant and a pharmacy
I walked 7.6km in 1h29m58s
Updated a pub




Shortlink
This article has a short URL available: https://drck.me/vlgrnd-shared-8qh