Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 252 by [email protected]: testapp.c sometimes fails due to race condition
http://code.google.com/p/memcached/issues/detail?id=252

What steps will reproduce the problem?
1. build memcached, run 'make check' and then ./testapp
2. Repeat many many times. Seems to fail more often on linux ppc64 and os x

Alternatively apply this patch to create an artificial race:

diff --git a/memcached.c b/memcached.c
index b121e16..678690b 100644
--- a/memcached.c
+++ b/memcached.c
@@ -4604,6 +4604,8 @@ static void save_pid(const char *pid_file) {
         return;
     }

+    usleep(25);
+
     fprintf(fp,"%ld\n", (long)getpid());
     if (fclose(fp) == -1) {
         vperror("Could not close the pid file %s", pid_file);

Error will be something like:

testapp: testapp.c:397: start_server: Assertion `fgets(buffer, sizeof(buffer), fp) != ((void *)0)' failed.

What version of the product are you using? On what operating system?

Have seen this on 1.4.13, and trunk, on Ubuntu.


Note that there is even a comment in this test that acknowledges the problem:

        /* loop and wait for the pid file.. There is a potential race
         * condition that the server just created the file but isn't
         * finished writing the content, but I'll take the chance....
         */

The attached patch solves the issue by retrying 5 times with 10us sleeps in between.

Attachments:
        fix-racey-test.patch  1.2 KB

Reply via email to