|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #57988 apc_store() and apc_fetch() does not work correctly with multiple cpus systems
Submitted: 2008-01-01 16:10 UTC Modified: 2008-01-02 02:47 UTC
From: joe7 at site dot hu Assigned:
Status: Not a bug Package: APC (PECL)
PHP Version: 4.4.4 OS: Unix/Debian
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: joe7 at site dot hu
New email:
PHP Version: OS:


 [2008-01-01 16:10 UTC] joe7 at site dot hu
Unfortunately there is a serious problem with apc_fetch/store on systems with multiple cpus or dual/quad core systems.

$bar = 'BAR';
apc_store('foo', $bar);

is good, but after this you just run:

several times, and you can get
FALSE instead of the value even if you set ttl of 1000+

There is a forum post about this at

Reproduce code:
$bar = 'BAR';
apc_store('foo', $bar);


Expected result:

Actual result:


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2008-01-02 02:47 UTC]
This has nothing to do with APC.  You are using a web server which launches multiple parent processes.  Each one is going to get its own APC shared memory segment, so when you do an apc_store() you are storing it in the segment belonging to the process you happen to hit and subsequent fetches may or may not hit that same process.

With Apache, there is a single parent process which spawns a bunch of child processes.  The shared memory segment is created in the parent process and inherited by the children so they all see the same one.  I really haven't tested configurations that don't follow this pattern, but you could remove the unlink() call in apc_mmap.c in the "normal filesystem mmap" section there and set apc.mmap_file_mask=/tmp/some_file_name

By not unlinking it, you get a regular file-backed mmap happening without owner-death protection, but multiple processes should hit the same file and thus the same shared memory segment.  In theory anyway.  Let me know if it works, but there is no bug here.  It is more of a feature request to make APC handle non-forking multi-process configurations.
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Feb 25 13:01:27 2024 UTC