diff --git a/libs/apscheduler/__init__.py b/libs/apscheduler/__init__.py index d93e1b3..71cc53d 100644 --- a/libs/apscheduler/__init__.py +++ b/libs/apscheduler/__init__.py @@ -1,3 +1,3 @@ -version_info = (2, 1, 1) +version_info = (2, 1, 2) version = '.'.join(str(n) for n in version_info[:3]) release = '.'.join(str(n) for n in version_info) diff --git a/libs/apscheduler/jobstores/shelve_store.py b/libs/apscheduler/jobstores/shelve_store.py index bd68333..d1be58f 100644 --- a/libs/apscheduler/jobstores/shelve_store.py +++ b/libs/apscheduler/jobstores/shelve_store.py @@ -21,7 +21,10 @@ class ShelveJobStore(JobStore): self.jobs = [] self.path = path self.pickle_protocol = pickle_protocol - self.store = shelve.open(path, 'c', self.pickle_protocol) + self._open_store() + + def _open_store(self): + self.store = shelve.open(self.path, 'c', self.pickle_protocol) def _generate_id(self): id = None @@ -33,7 +36,8 @@ class ShelveJobStore(JobStore): def add_job(self, job): job.id = self._generate_id() self.store[job.id] = job.__getstate__() - self.store.sync() + self.store.close() + self._open_store() self.jobs.append(job) def update_job(self, job): @@ -41,11 +45,13 @@ class ShelveJobStore(JobStore): job_dict['next_run_time'] = job.next_run_time job_dict['runs'] = job.runs self.store[job.id] = job_dict - self.store.sync() + self.store.close() + self._open_store() def remove_job(self, job): del self.store[job.id] - self.store.sync() + self.store.close() + self._open_store() self.jobs.remove(job) def load_jobs(self): diff --git a/libs/apscheduler/scheduler.py b/libs/apscheduler/scheduler.py index d6afcad..319037a 100644 --- a/libs/apscheduler/scheduler.py +++ b/libs/apscheduler/scheduler.py @@ -586,7 +586,10 @@ class Scheduler(object): wait_seconds = time_difference(next_wakeup_time, now) logger.debug('Next wakeup is due at %s (in %f seconds)', next_wakeup_time, wait_seconds) - self._wakeup.wait(wait_seconds) + try: + self._wakeup.wait(wait_seconds) + except IOError: # Catch errno 514 on some Linux kernels + pass self._wakeup.clear() elif self.standalone: logger.debug('No jobs left; shutting down scheduler') @@ -594,7 +597,10 @@ class Scheduler(object): break else: logger.debug('No jobs; waiting until a job is added') - self._wakeup.wait() + try: + self._wakeup.wait() + except IOError: # Catch errno 514 on some Linux kernels + pass self._wakeup.clear() logger.info('Scheduler has been shut down')