New submission from reidfaiv:

We have one application misbehaving in production environment under the load: 
it segfaults occasionally and throws exception which does not seem to make 
sense. We have tested both on 3.4 and 3.5.

For a background - we have taken a bit unusual path - as server is heavy on IO, 
bound to wait for external services but sometimes requires a lot of CPU to 
process next batch, then we use a many threads. We suspect that issues are 
related to multi-threading or running out some system level resources. We 
create connections (sockets) in each thread and do not use these across 
different threads - due this we have large number of sockets in use.

We have seen such segfaults:

#0  0x00000000004998a6 in sock_dealloc.50395 (s=0x7fafc2573800) at 
../Modules/socketmodule.c:3864
#1  0x00000000005356c3 in subtype_dealloc.15489 (self=<unknown at remote 
0x7fafc2573800>) at ../Objects/typeobject.c:1201
#2  0x000000000048b0a2 in PyEval_EvalFrameEx (f=f@entry=Frame 0x2281a08, for 
file /usr/lib/python3.4/ssl.py, line 669, in getpeercert (self=<unknown at 
remote 0x7fafc2573800>, binary_form=False), throwflag=throwflag@entry=0)
    at ../Python/ceval.c:2421
#3  0x000000000048e45b in PyEval_EvalCodeEx (_co=<optimized out>, 
globals=<optimized out>, locals=<optimized out>, args=<optimized out>, 
argcount=<optimized out>, kws=0x7fb0232080b0, kwcount=0, defs=0x7fb075447178, 
defcount=1,
    kwdefs=0x0, closure=0x0) at ../Python/ceval.c:3588
#4  0x000000000048a673 in fast_function (nk=<optimized out>, na=<optimized 
out>, n=<optimized out>, pp_stack=0x7fb00f4ee500, func=<function at remote 
0x7fb075443bf8>) at ../Python/ceval.c:4344
#5  call_function (oparg=<optimized out>, pp_stack=0x7fb00f4ee500) at 
../Python/ceval.c:4262
#6  PyEval_EvalFrameEx (
    f=f@entry=Frame 0x7fb023207f08, for file 
/usr/local/lib/python3.4/dist-packages/boto/https_connection.py, line 132, in 
connect (self=<CertValidatingHTTPSConnection(_tunnel_headers={}, 
response_class=<ABCMeta(_abc_cache=<WeakSet(_remove=<function at remote 
0x7fb074e850d0>, _pending_removals=[], _iterating=set(), data=set()) at remote 
0x7fb074e77b00>, _abc_registry=<WeakSet(_remove=<function at remote 
0x7fb074e85048>, _pending_removals=[], _iterating=set(), data=set()) at remote 
0x7fb074e77860>, __init__=<function at remote 0x7fb074e7cea0>, __doc__=None, 
_abc_negative_cache=<WeakSet(_remove=<function at remote 0x7fb074e85158>, 
_pending_removals=[], _iterating=set(), data=set()) at remote 0x7fb074e77da0>, 
__abstractmethods__=frozenset(), __module__='boto.connection', read=<function 
at remote 0x7fb074e7cf28>, _abc_negative_cache_version=28) at remote 
0x1a48bb8>, 
ca_certs='/usr/local/lib/python3.4/dist-packages/boto/cacerts/cacerts.txt', 
_tunnel_port=None, port=443, host='dynamodb.eu-
 west-1.amazonaws.com', source_address=No...(truncated), 
throwflag=throwflag@entry=0) at ../Python/ceval.c:2838


and

#0  PyObject_SetAttr (v=v@entry=<unknown at remote 0x7f8eadb00938>, 
name='keyfile', value=value@entry=None) at ../Objects/object.c:913
#1  0x0000000000486e0f in PyEval_EvalFrameEx (
    f=f@entry=Frame 0x7f8ef2246e88, for file /usr/lib/python3.4/ssl.py, line 
546, in __init__ (self=<unknown at remote 0x7f8eadb00938>, sock=<socket at 
remote 0x7f8eef12e0a8>, keyfile=None, certfile=None, server_side=False, 
cert_reqs=2, ssl_version=2, 
ca_certs='/usr/local/lib/python3.4/dist-packages/boto/cacerts/cacerts.txt', 
do_handshake_on_connect=True, family=<AddressFamily(_value_=2, 
_name_='AF_INET', __objclass__=<EnumMeta(_value2member_map_={0: 
<AddressFamily(_value_=0, _name_='AF_UNSPEC', __objclass__=<...>) at remote 
0x7f8f4fc51748>, 1: <AddressFamily(_value_=1, _name_='AF_UNIX', 
__objclass__=<...>) at remote 0x7f8f4fc52108>, 2: <...>, 3: 
<AddressFamily(_value_=3, _name_='AF_AX25', __objclass__=<...>) at remote 
0x7f8f4fc516c8>, 4: <AddressFamily(_value_=4, _name_='AF_IPX', 
__objclass__=<...>) at remote 0x7f8f4fc519c8>, 5: <AddressFamily(_value_=5, 
_name_='AF_APPLETALK', __objclass__=<...>) at remote 0x7f8f4fc52188>, 6: 
<AddressFamily(_value_=6, _name_='AF_NETROM', __objclass_
 _=<...>) at remote 0x7f8f4fc51bc8>, 7: <...(truncated), 
throwflag=throwflag@entry=0) at ../Python/ceval.c:2123
#2  0x000000000048f2df in PyEval_EvalCodeEx (closure=0x0, kwdefs=0x0, 
defcount=<optimized out>, defs=0x7f8f4edc5060, kwcount=<optimized out>, 
kws=0x7f8ed4376a20, argcount=1, args=<optimized out>, locals=0x0, 
globals=<optimized out>,
    _co=<optimized out>) at ../Python/ceval.c:3588
#3  function_call.78485 (func=<optimized out>, arg=<optimized out>, 
kw=<optimized out>) at ../Objects/funcobject.c:632
#4  0x000000000053493d in PyObject_Call (
    kw={'ciphers': None, 'suppress_ragged_eofs': True, 'sock': <socket at 
remote 0x7f8eef12e0a8>, 'server_side': False, 'ca_certs': 
'/usr/local/lib/python3.4/dist-packages/boto/cacerts/cacerts.txt', 
'do_handshake_on_connect': True, 'cert_reqs': 2, 'ssl_version': 2, 'certfile': 
None, 'keyfile': None}, arg=(<unknown at remote 0x7f8eadb00938>,), 
func=<function at remote 0x7f8f4edd27b8>) at ../Objects/abstract.c:2040


There are also Python level exceptions:

AttributeError: 'collections.deque' object has no attribute '_decref_socketios'

  .. application stack snipped ...

  File "application/readers/s3_state_reader.py", line 50, in read_state
    bucket = 
s3_connection.get_bucket(conf.appconf[_version.version]['s3.bucket_name'])
  File "boto/s3/connection.py", line 506, in get_bucket
    return self.head_bucket(bucket_name, headers=headers)
  File "boto/s3/connection.py", line 526, in head_bucket
    body = response.read()
  File "boto/connection.py", line 410, in read
    self._cached_response = http_client.HTTPResponse.read(self)
  File "http/client.py", line 442, in read
    self._close_conn()
  File "http/client.py", line 403, in _close_conn
    fp.close()
  File "python3.5/socket.py", line 645, in close
    self._sock._decref_socketios()

I have looked Python source code, both library and C code, and I am unable to 
figure out how _sock ends up with deque object.

I would hope that some of developers looks at these traces and helps forward 
with debugging. I am happy to spend time on this and try to reproduce in 
isolated manner or in debug environment.

----------
components: IO
messages: 303030
nosy: reidfaiv
priority: normal
severity: normal
status: open
title: Closing socket raises AttributeError: 'collections.deque' object has no 
attribute '_decref_socketios'
type: crash
versions: Python 3.4, Python 3.5

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue31591>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to