- /* Copyright (c) 2008, 2009 Nicira Networks
+ /* Copyright (c) 2008, 2009, 2010 Nicira Networks
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include "hmap.h"
#include "timeval.h"
#include "util.h"
-
-#define THIS_MODULE VLM_lockfile
#include "vlog.h"
+VLOG_DEFINE_THIS_MODULE(lockfile);
+
struct lockfile {
struct hmap_node hmap_node;
char *name;
* because the Open vSwitch code that currently uses lock files does so in
* stylized ways such that any number of readers may access a file while it
* is being written. */
+ long long int warn_elapsed = 1000;
long long int start, elapsed;
char *lock_name;
int error;
error = lockfile_try_lock(lock_name, timeout > 0, lockfilep);
time_refresh();
elapsed = time_msec() - start;
+ if (elapsed > warn_elapsed) {
+ warn_elapsed *= 2;
+ VLOG_WARN("%s: waiting for lock file, %lld ms elapsed",
+ lock_name, elapsed);
+ }
} while (error == EINTR && (timeout == INT_MAX || elapsed < timeout));
if (!error) {
{
struct lockfile *lockfile;
- HMAP_FOR_EACH (lockfile, struct lockfile, hmap_node, &lock_table) {
+ HMAP_FOR_EACH (lockfile, hmap_node, &lock_table) {
if (lockfile->fd >= 0) {
VLOG_WARN("%s: child does not inherit lock", lockfile->name);
lockfile_unhash(lockfile);
{
struct lockfile *lockfile;
- HMAP_FOR_EACH_WITH_HASH (lockfile, struct lockfile, hmap_node,
+ HMAP_FOR_EACH_WITH_HASH (lockfile, hmap_node,
lockfile_hash(device, inode), &lock_table) {
if (lockfile->device == device && lockfile->inode == inode) {
return lockfile;