|
Gaudi Framework, version v22r0 |
| Home | Generated: 9 Feb 2011 |
Classes | |
| class | LockFile |
| Lock a file. More... | |
Functions | |
| def | lock |
| def | unlock |
| def | _tmpFileName |
| def | _lckFileName |
| def | _linkCount |
| def | _read |
| def | _sleep |
Variables | |
| LOCK_EX = fcntl.F_WRLCK | |
| LOCK_SH = fcntl.F_RDLCK | |
| LOCK_NB = fcntl.F_UNLCK | |
| def locker::_lckFileName | ( | fileName | ) | [private] |
| def locker::_linkCount | ( | lockFileName | ) | [private] |
| def locker::_read | ( | fileName | ) | [private] |
| def locker::_sleep | ( | ) | [private] |
| def locker::_tmpFileName | ( | fileName | ) | [private] |
| def locker::lock | ( | file | ) |
Lock first 10 bytes of a file.
Definition at line 74 of file locker.py.
00075 : 00076 fileName = file.name 00077 tmpFileName = _tmpFileName(fileName) 00078 fp = open( tmpFileName, "w" ) 00079 fp.write( tmpFileName ) 00080 fp.close() 00081 00082 lockFileName = _lckFileName( fileName ) 00083 while True: 00084 if _linkCount(lockFileName) != -1: _sleep() 00085 try: 00086 os.link( tmpFileName, lockFileName ) 00087 # we acquired the lock 00088 return 00089 except OSError, e: 00090 if e.errno == errno.ENOENT: 00091 pass 00092 elif e.errno != errno.EEXIST: 00093 os.unlink(tmpFileName) 00094 raise 00095 elif _linkCount( lockFileName ) != 2: 00096 pass 00097 elif _read(lockFileName) == tmpFileName: 00098 raise 00099 else: 00100 # someone else owns that lock 00101 pass 00102 ## didn't get the lock !! 00103 ## say something ? 00104 #print _id_()," failed to acquire the lock ..." 00105 _sleep() 00106 pass 00107 return
| def locker::unlock | ( | file | ) |
Unlock first 10 bytes of a file.
Definition at line 108 of file locker.py.
00109 : 00110 fileName = file.name 00111 tmpFileName = _tmpFileName(fileName) 00112 lockFileName = _lckFileName( fileName ) 00113 00114 try: 00115 os.unlink( lockFileName ) 00116 except OSError, e: 00117 if e.errno != errno.ENOENT: 00118 raise 00119 # remove the tmp file 00120 try: 00121 os.unlink( tmpFileName ) 00122 except OSError, e: 00123 if e.errno != errno.ENOENT: 00124 raise 00125 return
| locker::LOCK_EX = fcntl.F_WRLCK |
| locker::LOCK_NB = fcntl.F_UNLCK |
| locker::LOCK_SH = fcntl.F_RDLCK |