import os
import logging
import threading
-from daklib.dbconn import DBConn,get_knownchange
+from daklib.dbconn import DBConn, get_dbchange
from daklib.config import Config
import apt_pkg
from daklib.dak_exceptions import DBUpdateError, InvalidDscError, ChangesUnicodeError
"""
def __init__(self):
self.next_in_line = None
- self.next_lock = threading.Condition()
+ self.read_lock = threading.Condition()
+ self.write_lock = threading.Condition()
self.die = False
def plsDie(self):
self.die = True
- self.next_lock.notify()
+ self.write_lock.acquire()
+ self.write_lock.notifyAll()
+ self.write_lock.release()
+
+ self.read_lock.acquire()
+ self.read_lock.notifyAll()
+ self.read_lock.release()
def enqueue(self, next):
- self.next_lock.acquire()
+ self.write_lock.acquire()
while self.next_in_line:
if self.die:
return
- self.next_lock.wait()
+ self.write_lock.wait()
assert( not self.next_in_line )
self.next_in_line = next
- self.next_lock.notify()
- self.next_lock.release()
+ self.write_lock.release()
+ self.read_lock.acquire()
+ self.read_lock.notify()
+ self.read_lock.release()
def dequeue(self):
- self.next_lock.acquire()
+ self.read_lock.acquire()
while not self.next_in_line:
if self.die:
return
- self.next_lock.wait()
+ self.read_lock.wait()
result = self.next_in_line
self.next_in_line = None
- self.next_lock.notify()
- self.next_lock.release()
+ self.read_lock.release()
+ self.write_lock.acquire()
+ self.write_lock.notify()
+ self.write_lock.release()
if isinstance(result, EndOfChanges):
return None
if os.path.exists(checkdir):
print "Looking into %s" % (checkdir)
- for dirpath, dirnames, filenames in os.walk(checkdir, topdown=False):
+ for dirpath, dirnames, filenames in os.walk(checkdir, topdown=True):
if not filenames:
# Empty directory (or only subdirectories), next
continue
continue
count += 1
- if not get_knownchange(changesfile, self.session):
+ if not get_dbchange(changesfile, self.session):
to_import = ChangesToImport(dirpath, changesfile, count)
if self.die:
return
except ChangesUnicodeError:
warn("found invalid changes file, not properly utf-8 encoded")
-
except KeyboardInterrupt:
print("Caught C-c; on ImportThread. terminating.")
self.parent.plsDie()
sys.exit(1)
- print("STUSTUSTUSTUSTU")
- return
+
except:
- traceback.print_exc()
self.parent.plsDie()
sys.exit(1)
self.threads=[]
sys.exit(1)
-
+
def main():
cnf = Config()
ImportKnownChanges(num_threads)
-
+
if __name__ == '__main__':
main()