summaryrefslogtreecommitdiff
path: root/odoo/__init__.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-10-10 19:14:30 +0200
committerChristophe Simonis <chs@odoo.com>2017-10-10 19:14:30 +0200
commit0be264b29eac11a5dec5e6565d23d4ea86bd905a (patch)
tree79362f2340c89cb3cf2e8d8a467f357b7c7a8326 /odoo/__init__.py
parentcf753a7fdf1739dcf37d2ad74f4c8efb3d4ff3b3 (diff)
parente1104ac344cbc349a46b22339b13dfe9cbab8bcb (diff)
[MERGE] forward port branch 11.0 up to e1104ac344c
Diffstat (limited to 'odoo/__init__.py')
-rw-r--r--odoo/__init__.py22
1 files changed, 20 insertions, 2 deletions
diff --git a/odoo/__init__.py b/odoo/__init__.py
index 2814706b57a..c6fa6e3032a 100644
--- a/odoo/__init__.py
+++ b/odoo/__init__.py
@@ -18,9 +18,27 @@ evented = False
if len(sys.argv) > 1 and sys.argv[1] == 'gevent':
sys.argv.remove('gevent')
import gevent.monkey
+ import psycopg2
+ from gevent.socket import wait_read, wait_write
gevent.monkey.patch_all()
- import psycogreen.gevent
- psycogreen.gevent.patch_psycopg()
+
+ def gevent_wait_callback(conn, timeout=None):
+ """A wait callback useful to allow gevent to work with Psycopg."""
+ # Copyright (C) 2010-2012 Daniele Varrazzo <daniele.varrazzo@gmail.com>
+ # This function is borrowed from psycogreen module which is licensed
+ # under the BSD license (see in odoo/debian/copyright)
+ while 1:
+ state = conn.poll()
+ if state == psycopg2.extensions.POLL_OK:
+ break
+ elif state == psycopg2.extensions.POLL_READ:
+ wait_read(conn.fileno(), timeout=timeout)
+ elif state == psycopg2.extensions.POLL_WRITE:
+ wait_write(conn.fileno(), timeout=timeout)
+ else:
+ raise psycopg2.OperationalError(
+ "Bad result from poll: %r" % state)
+ psycopg2.extensions.set_wait_callback(gevent_wait_callback)
evented = True
# Is the server running in prefork mode (e.g. behind Gunicorn).