XZise created this task.
XZise added subscribers: XZise, Omegat.
XZise added a project: pywikibot-core.
Restricted Application added subscribers: Aklapper, pywikipedia-bugs.

TASK DESCRIPTION
  When a httplib2.RedirectLimit (maybe also with others) occurred on 
`pywikibot.comms.http.fetch` it hangs:
  
  ```
  >>> import pywikibot.comms.http
  >>> pywikibot.comms.http.fetch('http://www.tvtropes.org/api.php')
  Traceback (most recent call last):
    File "/home/xzise/.pyenv/versions/3.4.3/lib/python3.4/threading.py", line 
920, in _bootstrap_inner
      self.run()
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
549, in run
      item.data = self.http.request(*item.args, **item.kwargs)
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
260, in request
      uri, method, body, headers, response, content, max_redirects)
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
307, in _follow_redirect
      max_redirects=max_redirects - 1)
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
260, in request
      uri, method, body, headers, response, content, max_redirects)
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
311, in _follow_redirect
      response, content)
  httplib2.RedirectLimit: Redirected more times than redirection_limit allows.
  
  ^CTraceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "/home/xzise/Programms/pywikibot/core/pywikibot/comms/http.py", line 
364, in fetch
      error_handling_callback(request)
    File "/home/xzise/Programms/pywikibot/core/pywikibot/comms/http.py", line 
274, in error_handling_callback
      if isinstance(request.data, SSLHandshakeError):
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
392, in data
      self._join()
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
386, in _join
      self.lock.acquire(True)
    File 
"/home/xzise/Programms/pywikibot/core/pywikibot/comms/threadedhttp.py", line 
323, in acquire
      return super(S, self).acquire(blocking)
    File "/home/xzise/.pyenv/versions/3.4.3/lib/python3.4/threading.py", line 
421, in acquire
      self._cond.wait(timeout)
    File "/home/xzise/.pyenv/versions/3.4.3/lib/python3.4/threading.py", line 
290, in wait
      waiter.acquire()
  KeyboardInterrupt
  ```
  
  From what I could tell it's not releasing the semaphore correctly (although 
when looking at the code it should and it does actually call that) and when it 
then tries to check for errors it tries to acquire it and waits then on it.
  
              try:
                  # inside of that it crashes
                  item.data = self.http.request(*item.args, **item.kwargs)
              finally:
                  if item.lock:
                      # this line is called
                      item.lock.release()
  
  I tried to determine where it acquires the lock but only find the one place 
in `fetch` and then one when it tries to get the data in 
`error_handling_callback`.
  
  (//Note: The line numbers are bit off as I try to debug that one//)

TASK DETAIL
  https://phabricator.wikimedia.org/T94993

REPLY HANDLER ACTIONS
  Reply to comment or attach files, or !close, !claim, !unsubscribe or !assign 
<username>.

EMAIL PREFERENCES
  https://phabricator.wikimedia.org/settings/panel/emailpreferences/

To: XZise
Cc: Omegat, Aklapper, XZise, jayvdb, pywikipedia-bugs



_______________________________________________
Pywikipedia-bugs mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-bugs

Reply via email to