X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Ftest-lockfile.c;h=121b2bab83028e0fff666df9d4b6757cd1fd4172;hb=e6269c12f294f71c9e6a31c153a12cf26124c235;hp=31e13a72c42d7006543dbb1d1b0cc3a9e8d7b3fc;hpb=58fda1dab104041fc693032475ec4662c1a52849;p=openvswitch diff --git a/tests/test-lockfile.c b/tests/test-lockfile.c index 31e13a72..121b2bab 100644 --- a/tests/test-lockfile.c +++ b/tests/test-lockfile.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009 Nicira Networks. + * Copyright (c) 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ #include "process.h" #include "timeval.h" #include "util.h" +#include "vlog.h" #undef NDEBUG #include @@ -100,10 +101,15 @@ do_fork(void) static void run_lock_blocks_other_process(void) { - struct lockfile *lockfile; + /* Making this static prevents a memory leak warning from valgrind for the + * parent process, which cannot easily unlock (and free) 'lockfile' because + * it can only do so after the child has exited, and it's the caller of + * this function that does the wait() call. */ + static struct lockfile *lockfile; assert(lockfile_lock("file", 0, &lockfile) == 0); if (do_fork() == CHILD) { + lockfile_unlock(lockfile); assert(lockfile_lock("file", 0, &lockfile) == EAGAIN); exit(11); } @@ -144,6 +150,7 @@ run_lock_timeout_gets_the_lock(void) assert(lockfile_lock("file", 0, &lockfile) == 0); if (do_fork() == CHILD) { + lockfile_unlock(lockfile); assert(lockfile_lock("file", TIME_UPDATE_INTERVAL * 3, &lockfile) == 0); exit(11); @@ -164,6 +171,7 @@ run_lock_timeout_runs_out(void) assert(lockfile_lock("file", 0, &lockfile) == 0); if (do_fork() == CHILD) { + lockfile_unlock(lockfile); assert(lockfile_lock("file", TIME_UPDATE_INTERVAL, &lockfile) == ETIMEDOUT); exit(11); @@ -223,17 +231,18 @@ static const struct test tests[] = { TEST(lock_timeout_runs_out), TEST(lock_multiple), TEST(help), - { 0, 0 } + { NULL, NULL } #undef TEST }; int main(int argc, char *argv[]) { + extern struct vlog_module VLM_lockfile; size_t i; set_program_name(argv[0]); - time_init(); + vlog_set_levels(&VLM_lockfile, VLF_ANY_FACILITY, VLL_ERR); if (argc != 2) { ovs_fatal(0, "exactly one argument required; use \"%s help\" for help",