[issue17097] baseManager serve_client() not check EINTR when recv request

2013-02-01 Thread Richard Oudkerk

Changes by Richard Oudkerk :


--
nosy: +sbt

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue17097] baseManager serve_client() not check EINTR when recv request

2013-02-01 Thread lvroyce

New submission from lvroyce:

We create our customised manager which will fork child process with 
baseManager. Because we registered SIGCHLD to reap the zombie for manager, we 
found this causes baseManager raise RemoteError when called twice.(Test script 
attached.)

After look at baseManager.py we found recv() in handling the request has been 
interrupted by comming SIGCHLD, not retry recv(), but raise to client side 
directly.
try:

methodname = obj = None

request = recv()<--this line been interrupted 
by SIGCHLD

ident, methodname, args, kwds = request

obj, exposed, gettypeid = id_to_obj[ident]

if methodname not in exposed:

raise AttributeError(

'method %r of %r object is not in exposed=%r' %

(methodname, type(obj), exposed)

)

function = getattr(obj, methodname)
try:

res = function(*args, **kwds)

except Exception, e:

msg = ('#ERROR', e)

else:

typeid = gettypeid and gettypeid.get(methodname, None)

if typeid:

rident, rexposed = self.create(conn, typeid, res)

token = Token(typeid, self.address, rident)

msg = ('#PROXY', (rexposed, token))

else:

msg = ('#RETURN', res)
except AttributeError:
if methodname is None:
msg = ('#TRACEBACK', format_exc())
else:
try:
fallback_func = self.fallback_mapping[methodname]
result = fallback_func(
self, conn, ident, obj, *args, **kwds
)
msg = ('#RETURN', result)
except Exception:
msg = ('#TRACEBACK', format_exc())

except EOFError:
util.debug('got EOF -- exiting thread serving %r',
   threading.current_thread().name)
sys.exit(0)

except Exception:<--does not handle IOError,INTR here should 
retry recv() 
msg = ('#TRACEBACK', format_exc())

--
files: fakesupervdsm.py
messages: 181074
nosy: lvroyce
priority: normal
severity: normal
status: open
title: baseManager serve_client() not check EINTR when recv request
type: behavior
versions: Python 3.3
Added file: http://bugs.python.org/file28930/fakesupervdsm.py

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com