> In this case, I got the spelling and capitalization directly from
> rahim's original email.  I feel that it is polite to spell and
> capitalize a person's name as he does himself.  What do you think?

I agree with you on spelling, disagree on capitalization.  That said,
I don't particularly care.  I'm fine with leaving it.

Ethan

>
> Thanks,
>
> Ben.
>
> On Thu, Aug 30, 2012 at 04:56:47PM -0700, Ethan Jackson wrote:
>> Will you please capitalize Rahim's name in the Reported-By? Should he
>> be added to authors? Looks like a win, thanks.
>>
>> Acked-by: Ethan Jackson <[email protected]>
>> Ethan
>>
>>
>> On Thu, Aug 30, 2012 at 3:29 PM, Ben Pfaff <[email protected]> wrote:
>> > Reported-by: rahim entezari <[email protected]>
>> > Signed-off-by: Ben Pfaff <[email protected]>
>> > ---
>> >  lib/lockfile.c    |   21 ++++++++++++++++-----
>> >  tests/lockfile.at |    7 ++++---
>> >  2 files changed, 20 insertions(+), 8 deletions(-)
>> >
>> > diff --git a/lib/lockfile.c b/lib/lockfile.c
>> > index db84aeb..3708aec 100644
>> > --- a/lib/lockfile.c
>> > +++ b/lib/lockfile.c
>> > @@ -55,7 +55,8 @@ struct lockfile {
>> >  static struct hmap lock_table = HMAP_INITIALIZER(&lock_table);
>> >
>> >  static void lockfile_unhash(struct lockfile *);
>> > -static int lockfile_try_lock(const char *name, struct lockfile 
>> > **lockfilep);
>> > +static int lockfile_try_lock(const char *name, pid_t *pidp,
>> > +                             struct lockfile **lockfilep);
>> >
>> >  /* Returns the name of the lockfile that would be created for locking a 
>> > file
>> >   * named 'filename_'.  The caller is responsible for freeing the returned 
>> > name,
>> > @@ -98,21 +99,27 @@ lockfile_lock(const char *file, struct lockfile 
>> > **lockfilep)
>> >       * stylized ways such that any number of readers may access a file 
>> > while it
>> >       * is being written. */
>> >      char *lock_name;
>> > +    pid_t pid;
>> >      int error;
>> >
>> >      COVERAGE_INC(lockfile_lock);
>> >
>> >      lock_name = lockfile_name(file);
>> >
>> > -    error = lockfile_try_lock(lock_name, lockfilep);
>> > +    error = lockfile_try_lock(lock_name, &pid, lockfilep);
>> >
>> >      if (error) {
>> >          COVERAGE_INC(lockfile_error);
>> >          if (error == EACCES) {
>> >              error = EAGAIN;
>> >          }
>> > -        VLOG_WARN("%s: failed to lock file: %s",
>> > -                  lock_name, strerror(error));
>> > +        if (pid) {
>> > +            VLOG_WARN("%s: cannot lock file because it is already locked 
>> > by "
>> > +                      "pid %ld", lock_name, (long int) pid);
>> > +        } else {
>> > +            VLOG_WARN("%s: failed to lock file: %s",
>> > +                      lock_name, strerror(error));
>> > +        }
>> >      }
>> >
>> >      free(lock_name);
>> > @@ -201,7 +208,7 @@ lockfile_register(const char *name, dev_t device, 
>> > ino_t inode, int fd)
>> >  }
>> >
>> >  static int
>> > -lockfile_try_lock(const char *name, struct lockfile **lockfilep)
>> > +lockfile_try_lock(const char *name, pid_t *pidp, struct lockfile 
>> > **lockfilep)
>> >  {
>> >      struct flock l;
>> >      struct stat s;
>> > @@ -209,6 +216,7 @@ lockfile_try_lock(const char *name, struct lockfile 
>> > **lockfilep)
>> >      int fd;
>> >
>> >      *lockfilep = NULL;
>> > +    *pidp = 0;
>> >
>> >      /* Check whether we've already got a lock on that file. */
>> >      if (!stat(name, &s)) {
>> > @@ -250,6 +258,9 @@ lockfile_try_lock(const char *name, struct lockfile 
>> > **lockfilep)
>> >      if (!error) {
>> >          *lockfilep = lockfile_register(name, s.st_dev, s.st_ino, fd);
>> >      } else {
>> > +        if (!fcntl(fd, F_GETLK, &l) && l.l_type != F_UNLCK) {
>> > +            *pidp = l.l_pid;
>> > +        }
>> >          close(fd);
>> >      }
>> >      return error;
>> > diff --git a/tests/lockfile.at b/tests/lockfile.at
>> > index 50999e4..2644d3f 100644
>> > --- a/tests/lockfile.at
>> > +++ b/tests/lockfile.at
>> > @@ -5,7 +5,8 @@ m4_define([CHECK_LOCKFILE],
>> >     AT_KEYWORDS([lockfile])
>> >     AT_CHECK([test-lockfile $1], [0], [$1: success (m4_if(
>> >       [$2], [1], [$2 child], [$2 children]))
>> > -], [$3])
>> > +], [stderr])
>> > +   AT_CHECK([sed 's/pid [[0-9]]*/pid <pid>/' stderr], [0], [$3])
>> >     AT_CLEANUP])
>> >
>> >  CHECK_LOCKFILE([lock_and_unlock], [0])
>> > @@ -23,13 +24,13 @@ lockfile|WARN|.file.~lock~: failed to lock file: 
>> > Resource deadlock avoided
>> >
>> >  CHECK_LOCKFILE([lock_blocks_other_process], [1],
>> >    [lockfile|WARN|.file.~lock~: child does not inherit lock
>> > -lockfile|WARN|.file.~lock~: failed to lock file: Resource temporarily 
>> > unavailable
>> > +lockfile|WARN|.file.~lock~: cannot lock file because it is already locked 
>> > by pid <pid>
>> >  ])
>> >
>> >  CHECK_LOCKFILE([lock_twice_blocks_other_process], [1],
>> >    [lockfile|WARN|.file.~lock~: failed to lock file: Resource deadlock 
>> > avoided
>> >  lockfile|WARN|.file.~lock~: child does not inherit lock
>> > -lockfile|WARN|.file.~lock~: failed to lock file: Resource temporarily 
>> > unavailable
>> > +lockfile|WARN|.file.~lock~: cannot lock file because it is already locked 
>> > by pid <pid>
>> >  ])
>> >
>> >  CHECK_LOCKFILE([lock_and_unlock_allows_other_process], [1])
>> > --
>> > 1.7.2.5
>> >
>> > _______________________________________________
>> > dev mailing list
>> > [email protected]
>> > http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to