diff options
Diffstat (limited to 'open_issues')
-rw-r--r-- | open_issues/file_locking.mdwn | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/open_issues/file_locking.mdwn b/open_issues/file_locking.mdwn new file mode 100644 index 00000000..ddcb4e0f --- /dev/null +++ b/open_issues/file_locking.mdwn @@ -0,0 +1,74 @@ +[[!meta copyright="Copyright © 2010 Free Software Foundation, Inc."]] + +[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable +id="license" text="Permission is granted to copy, distribute and/or modify this +document under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no Invariant +Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license +is included in the section entitled [[GNU Free Documentation +License|/fdl]]."]]"""]] + +[[!tag open_issue_hurd open_issue_glibc]] + +IRC, #hurd, 2011-12-31. + + <pinotree> youpi: i found the issue with python-apt + <pinotree> s/with/of/ + <youpi> good! + <pinotree> lock file issue, though :/ + <youpi> :/ + <pinotree> this is the sample test case, derived from apt's code: + http://paste.debian.net/103536/ + <pinotree> basically, it seems asking for a file lock in the same process + where there's already such lock on the file, fails + <pinotree> youpi: ↑ + <youpi> uh, posix doesn't even define some nesting + <pinotree> it seems it just talks about concurrency with other processes + <youpi> posix tells more about it later + <youpi> saying that if a lock already exists, then it is replaced by the + new + <youpi> (when inside the same process) + <pinotree> yay, found a bug in hurd :p + <youpi> well, actually it's known + <youpi> i.e. setlk is completely bogus, based on flock + <youpi> and flock doesn't have the same semantic in that regard + <youpi> so we can't fix it without really implementing setlk + <pinotree> the XXX comment in glibc/sysdeps/mach/hurd/fcntl.c, by chance? + :) + <youpi> of course :) + <pinotree> youpi: hm, flock's man page says: + <pinotree> "A process may only hold one type of lock (shared or exclusive) + on a file. Subsequent flock() calls on an already locked file will + convert an existing lock to the new lock mode." + <pinotree> so a new lock in the same process over the original lock should + replace the old one? + <youpi> uh, that's not what I had seen + <pinotree> http://linux.die.net/man/2/flock + <youpi> An attempt to lock the file using one of these file descrip- + <youpi> tors may be denied by a lock that the calling process + has already + <youpi> placed via another descriptor. + <youpi> so it's really not that easy + <pinotree> that's in case of trying to create a lock on a file with a + different fd than the existing lock + <youpi> that's what your testcase does + <pinotree> which, hm, is python-apt's case + <youpi> that being said, the sentence I pasted does not seem to appear in + posix + <pinotree> flock() does not seem posix + <youpi> it may have been the behavior of Linux at some point in the past + <youpi> it's not , but F_SETLK is + <youpi> and in linux world, flock <=> F_SETLK, iirc + <youpi> in glibc world, even + <youpi> (just checked it, see sysdeps/posix/flock.c + <youpi> pinotree: I guess your testcase works on Linux? + <pinotree> which means we should get a proper F_SETLK working, and then + just use this flock version (instead of the custom one), no? + <pinotree> yes, it works on linux (and on kfreebsd, see that python-apt + builds) + <youpi> no, I mean our flock() should probably be happy with locking part + of a file several times + <youpi> (that is, hurd's file_lock() RPC) + <youpi> ah, no, on Linux flock is its own system call + <youpi> (which is independant from lockf from the locking point of view, + iirc) |