Added clear_sysy_exc_info to eventlet.common.
Portable clearing of last exception information - No-op in 3.x and ys.exc_clear in 2.x
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import sys
|
||||
def get_errno(exc):
|
||||
""" Get the error code out of socket.error objects.
|
||||
socket.error in <2.5 does not have errno attribute
|
||||
@@ -17,3 +18,11 @@ def get_errno(exc):
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
if sys.version_info[0]<3:
|
||||
clear_sys_exc_info = sys.exc_clear
|
||||
else:
|
||||
def clear_sys_exc_info():
|
||||
"""No-op In py3k.
|
||||
Exception information is not visible outside of except statements.
|
||||
sys.exc_clear became obsolete and removed."""
|
||||
pass
|
||||
|
@@ -2,18 +2,12 @@ import heapq
|
||||
import sys
|
||||
import traceback
|
||||
|
||||
from eventlet.common import clear_sys_exc_info
|
||||
from eventlet.support import greenlets as greenlet
|
||||
from eventlet.hubs import timer
|
||||
from eventlet import patcher
|
||||
time = patcher.original('time')
|
||||
|
||||
# In py3k exception information is not visible outside of except statements
|
||||
# so sys.exc_clear become obsolete and removed.
|
||||
try:
|
||||
sys_exc_clear = sys.exc_clear
|
||||
except AttributeError:
|
||||
sys_exc_clear = lambda: None
|
||||
|
||||
READ="read"
|
||||
WRITE="write"
|
||||
|
||||
@@ -110,7 +104,7 @@ class BaseHub(object):
|
||||
switch_out()
|
||||
except:
|
||||
self.squelch_generic_exception(sys.exc_info())
|
||||
sys.exc_clear()
|
||||
clear_sys_exc_info()
|
||||
if self.greenlet.dead:
|
||||
self.greenlet = greenlet.greenlet(self.run)
|
||||
try:
|
||||
@@ -118,7 +112,7 @@ class BaseHub(object):
|
||||
cur.parent = self.greenlet
|
||||
except ValueError:
|
||||
pass # gets raised if there is a greenlet parent cycle
|
||||
sys_exc_clear()
|
||||
clear_sys_exc_info()
|
||||
return self.greenlet.switch()
|
||||
|
||||
def squelch_exception(self, fileno, exc_info):
|
||||
@@ -257,7 +251,7 @@ class BaseHub(object):
|
||||
raise
|
||||
except:
|
||||
self.squelch_timer_exception(timer, sys.exc_info())
|
||||
sys.exc_clear()
|
||||
clear_sys_exc_info()
|
||||
finally:
|
||||
self.timer_finished(timer)
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import sys
|
||||
import errno
|
||||
from eventlet import patcher
|
||||
from eventlet.common import get_errno
|
||||
from eventlet.common import get_errno, clear_sys_exc_info
|
||||
select = patcher.original('select')
|
||||
time = patcher.original('time')
|
||||
|
||||
@@ -58,4 +58,4 @@ class Hub(BaseHub):
|
||||
raise
|
||||
except:
|
||||
self.squelch_exception(fileno, sys.exc_info())
|
||||
sys.exc_clear()
|
||||
clear_sys_exc_info()
|
||||
|
@@ -4,6 +4,7 @@ are not leaked by the hub.
|
||||
import sys
|
||||
import unittest
|
||||
from pprint import pformat
|
||||
from eventlet.common import clear_sys_exc_info
|
||||
from eventlet.green import socket
|
||||
from eventlet.green.thread import start_new_thread
|
||||
from eventlet.green.time import sleep
|
||||
@@ -61,7 +62,7 @@ def run_interaction(run_client):
|
||||
|
||||
def run_and_check(run_client):
|
||||
w = run_interaction(run_client=run_client)
|
||||
sys.exc_clear()
|
||||
clear_sys_exc_info()
|
||||
if w():
|
||||
print pformat(gc.get_referrers(w()))
|
||||
for x in gc.get_referrers(w()):
|
||||
|
Reference in New Issue
Block a user