Fwd: [PECL-CVS] cvs: pecl /apc CHANGELOG apc_cache.c php_apc.c
[email protected] (Brian Shire) Tue, 29 Jan 2008 18:32:04 -0800
| Newsgroups | php.apc.dev |
|---|---|
| Message-ID | <[email protected]> |
Hey Rasmus, I just realized that you had already made a bug fix which I have just also committed changes for. I've added an expunge callback that will expunge the cache from the sma code when it's attempting to alloc space. This gives me the ability to play with a least frequently used algorithm in the future, ensures that we don't expunge due to the exclusive failure in apc_add(), and that we insert the new entry after we expunge so it's always successful. Shout at me if you see problems with my thinking here, otherwise I think I've created some duplicate code that I'll cleanup. -shire Begin forwarded message: > From: "Rasmus Lerdorf" <[email protected]> > Date: January 24, 2008 11:10:48 PM PST > To: [email protected] > Subject: [PECL-CVS] cvs: pecl /apc CHANGELOG apc_cache.c php_apc.c > > rasmus Fri Jan 25 07:10:48 2008 UTC > > Modified files: > /pecl/apc CHANGELOG apc_cache.c php_apc.c > Log: > We don't want to expunge on an exclusive user cache insert that > doesn't > insert because of the exclusivity check. So make the user cache > insert > return values match the opcode cache return values for > consistency and > check for them correctly. > > > http://cvs.php.net/viewvc.cgi/pecl/apc/CHANGELOG? > r1=1.39&r2=1.40&diff_format=u > Index: pecl/apc/CHANGELOG > diff -u pecl/apc/CHANGELOG:1.39 pecl/apc/CHANGELOG:1.40 > --- pecl/apc/CHANGELOG:1.39 Wed Dec 26 22:46:33 2007 > +++ pecl/apc/CHANGELOG Fri Jan 25 07:10:48 2008 > @@ -1,3 +1,5 @@ > +- Fix apc_add() cache expunge bug (Rasmus) > + > 3.0.16: 2007-12-26 > - Fix for longstanding cache-full crash (Christian Seiler) > http://news.php.net/php.pecl.dev/4951 for the details > http://cvs.php.net/viewvc.cgi/pecl/apc/apc_cache.c? > r1=3.148&r2=3.149&diff_format=u > Index: pecl/apc/apc_cache.c > diff -u pecl/apc/apc_cache.c:3.148 pecl/apc/apc_cache.c:3.149 > --- pecl/apc/apc_cache.c:3.148 Wed Jan 9 10:33:05 2008 > +++ pecl/apc/apc_cache.c Fri Jan 25 07:10:48 2008 > @@ -28,7 +28,7 @@ > > */ > > -/* $Id: apc_cache.c,v 3.148 2008/01/09 10:33:05 gopalv Exp $ */ > +/* $Id: apc_cache.c,v 3.149 2008/01/25 07:10:48 rasmus Exp $ */ > > #include "apc_cache.h" > #include "apc_lock.h" > @@ -484,7 +484,7 @@ > size_t* mem_size_ptr = NULL; > > if (!value) { > - return 0; > + return -1; > } > > LOCK(cache); > @@ -535,7 +535,7 @@ > > if ((*slot = make_slot(key, value, *slot, t)) == NULL) { > UNLOCK(cache); > - return 0; > + return -1; > } > if (APCG(mem_size_ptr) != NULL) { > value->mem_size = *APCG(mem_size_ptr); > http://cvs.php.net/viewvc.cgi/pecl/apc/php_apc.c? > r1=3.158&r2=3.159&diff_format=u > Index: pecl/apc/php_apc.c > diff -u pecl/apc/php_apc.c:3.158 pecl/apc/php_apc.c:3.159 > --- pecl/apc/php_apc.c:3.158 Tue Jan 8 21:42:32 2008 > +++ pecl/apc/php_apc.c Fri Jan 25 07:10:48 2008 > @@ -26,7 +26,7 @@ > > */ > > -/* $Id: php_apc.c,v 3.158 2008/01/08 21:42:32 gopalv Exp $ */ > +/* $Id: php_apc.c,v 3.159 2008/01/25 07:10:48 rasmus Exp $ */ > > #include "apc_zend.h" > #include "apc_cache.h" > @@ -222,7 +222,7 @@ > #else > php_info_print_table_row(2, "Locking type", "File Locks"); > #endif > - php_info_print_table_row(2, "Revision", "$Revision: 3.158 $"); > + php_info_print_table_row(2, "Revision", "$Revision: 3.159 $"); > php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__); > php_info_print_table_end(); > DISPLAY_INI_ENTRIES(); > @@ -539,6 +539,7 @@ > apc_cache_key_t key; > time_t t; > size_t mem_size = 0; > + int ret; > > #if PHP_API_VERSION < 20041225 > #if HAVE_APACHE && defined(APC_PHP4_STAT) > @@ -572,20 +573,22 @@ > return 0; > } > > - if (!apc_cache_user_insert(apc_user_cache, key, entry, t, > exclusive TSRMLS_CC)) { > - APCG(mem_size_ptr) = NULL; > + if (ret = apc_cache_user_insert(apc_user_cache, key, entry, t, > exclusive TSRMLS_CC)!=1) { > apc_cache_free_entry(entry); > - apc_cache_expunge(apc_cache,t); > - apc_cache_expunge(apc_user_cache,t); > - HANDLE_UNBLOCK_INTERRUPTIONS(); > - return 0; > + if(ret==-1) { > + APCG(mem_size_ptr) = NULL; > + apc_cache_expunge(apc_cache,t); > + apc_cache_expunge(apc_user_cache,t); > + HANDLE_UNBLOCK_INTERRUPTIONS(); > + return 0; > + } > } > > APCG(mem_size_ptr) = NULL; > > HANDLE_UNBLOCK_INTERRUPTIONS(); > > - return 1; > + return ret; > } > /* }}} */ > > > -- > PECL CVS Mailing List > To unsubscribe, visit: http://www.php.net/unsub.php >