diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py index aac2e725f96..f1fa08f9fe9 100644 --- a/addons/mrp/mrp.py +++ b/addons/mrp/mrp.py @@ -781,7 +781,8 @@ class mrp_production(osv.osv): proc_obj = self.pool.get("procurement.order") procs = proc_obj.search(cr, uid, [('production_id', 'in', ids)], context=context) if procs: - proc_obj.message_post(cr, uid, procs, body=_('Manufacturing order cancelled.'), context=context) + for proc in procs: + proc_obj.message_post(cr, uid, proc, body=_('Manufacturing order cancelled.'), context=context) proc_obj.write(cr, uid, procs, {'state': 'exception'}, context=context) return True diff --git a/doc/cla/individual/igallart.md b/doc/cla/individual/igallart.md new file mode 100644 index 00000000000..3bf5a8f735c --- /dev/null +++ b/doc/cla/individual/igallart.md @@ -0,0 +1,11 @@ +Spain, 2017-02-27 + +I hereby agree to the terms of the Odoo Individual Contributor License +Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this +declaration. + +Signed, + +Isaac Gallart Bochons igallart@puntsistemes.es https://github.com/igallart diff --git a/openerp/addons/base/ir/ir_cron.py b/openerp/addons/base/ir/ir_cron.py index c4fb701f0c7..fde751ba491 100644 --- a/openerp/addons/base/ir/ir_cron.py +++ b/openerp/addons/base/ir/ir_cron.py @@ -188,20 +188,20 @@ class ir_cron(osv.osv): """ db = openerp.sql_db.db_connect(db_name) threading.current_thread().dbname = db_name - cr = db.cursor() jobs = [] try: - # Make sure the database we poll has the same version as the code of base - cr.execute("SELECT 1 FROM ir_module_module WHERE name=%s AND latest_version=%s", ('base', BASE_VERSION)) - if cr.fetchone(): - # Careful to compare timestamps with 'UTC' - everything is UTC as of v6.1. - cr.execute("""SELECT * FROM ir_cron - WHERE numbercall != 0 - AND active AND nextcall <= (now() at time zone 'UTC') - ORDER BY priority""") - jobs = cr.dictfetchall() - else: - _logger.warning('Skipping database %s as its base version is not %s.', db_name, BASE_VERSION) + with db.cursor() as cr: + # Make sure the database we poll has the same version as the code of base + cr.execute("SELECT 1 FROM ir_module_module WHERE name=%s AND latest_version=%s", ('base', BASE_VERSION)) + if cr.fetchone(): + # Careful to compare timestamps with 'UTC' - everything is UTC as of v6.1. + cr.execute("""SELECT * FROM ir_cron + WHERE numbercall != 0 + AND active AND nextcall <= (now() at time zone 'UTC') + ORDER BY priority""") + jobs = cr.dictfetchall() + else: + _logger.warning('Skipping database %s as its base version is not %s.', db_name, BASE_VERSION) except psycopg2.ProgrammingError, e: if e.pgcode == '42P01': # Class 42 — Syntax Error or Access Rule Violation; 42P01: undefined_table @@ -211,8 +211,6 @@ class ir_cron(osv.osv): raise except Exception: _logger.warning('Exception in cron:', exc_info=True) - finally: - cr.close() for job in jobs: lock_cr = db.cursor() diff --git a/openerp/service/server.py b/openerp/service/server.py index ead7aab9935..9223d7b157e 100644 --- a/openerp/service/server.py +++ b/openerp/service/server.py @@ -217,8 +217,12 @@ class ThreadedServer(CommonServer): _logger.debug('cron%d polling for jobs', number) for db_name, registry in registries.iteritems(): while registry.ready: - acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name) - if not acquired: + try: + acquired = openerp.addons.base.ir.ir_cron.ir_cron._acquire_job(db_name) + if not acquired: + break + except Exception: + _logger.warning('cron%d encountered an Exception:', number, exc_info=True) break def cron_spawn(self):