Python 3 asyncio selectors fix #344

Merged
akinwale merged 5 commits from python3-selector-fix into master 2018-10-28 19:12:40 +01:00
5 changed files with 37 additions and 10 deletions

View file

@ -30,6 +30,10 @@ export function doUpdateLoadStatus(uri, outpoint) {
full_status: true,
}).then(([fileInfo]) => {
if (!fileInfo || fileInfo.written_bytes === 0) {
// if the outpoint isn't in the state, then it was probably canceled, so stop checking the load status
const { downloadingByOutpoint = {} } = state.fileInfo;
if (!downloadingByOutpoint[outpoint]) return;
// download hasn't started yet
setTimeout(() => {
dispatch(doUpdateLoadStatus(uri, outpoint));
@ -133,7 +137,7 @@ export function doStopDownloadingFile(uri, fileInfo) {
Lbry.file_set_status(params).then(() => {
dispatch({
type: ACTIONS.DOWNLOADING_CANCELED,
data: {}
data: { uri, outpoint: fileInfo.outpoint }
});
// Should also delete the file after the user stops downloading

View file

@ -1,9 +1,3 @@
// This depends on the openjdk-8-jdk package (Ubuntu) being installed
compileJava {
options.fork = true
options.forkOptions.executable = /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {

View file

@ -161,7 +161,7 @@ class Python3Recipe(TargetPythonRecipe):
def prebuild_arch(self, arch):
super(Python3Recipe, self).prebuild_arch(arch)
if self.version == '3.6':
Python3Recipe.patches = ['patch_python3.6.patch']
Python3Recipe.patches = ['patch_python3.6.patch', 'selectors.patch']
build_dir = self.get_build_dir(arch.arch)
shprint(sh.ln, '-sf',
realpath(join(build_dir, 'Lib/site-packages/README.txt')),

View file

@ -0,0 +1,15 @@
--- a/Lib/selectors.py 2018-06-27 00:39:50.000000000 +0100
+++ b/Lib/selectors.py 2018-10-28 17:39:46.027757518 +0100
@@ -599,9 +599,9 @@
# Choose the best implementation, roughly:
# epoll|kqueue|devpoll > poll > select.
# select() also can't accept a FD > FD_SETSIZE (usually around 1024)
-if 'KqueueSelector' in globals():
- DefaultSelector = KqueueSelector
-elif 'EpollSelector' in globals():
+#if 'KqueueSelector' in globals():
+# DefaultSelector = KqueueSelector
+if 'EpollSelector' in globals():
DefaultSelector = EpollSelector
elif 'DevpollSelector' in globals():
DefaultSelector = DevpollSelector

View file

@ -1,10 +1,24 @@
import sys
from twisted.internet import asyncioreactor
if 'twisted.internet.reactor' not in sys.modules:
asyncioreactor.install()
eukreign commented 2018-10-28 18:44:36 +01:00 (Migrated from github.com)
Review

This might lead to confusing results if the wrong reactor was installed previously. I think it would better to either 1) just asyncioreactor.install() without putting it inside of a conditional or, alternately, 2) add an else to the existing condition which checks that the reactor installed previously is in fact an asyncioreactor.

This might lead to confusing results if the wrong reactor was installed previously. I think it would better to either 1) just `asyncioreactor.install()` without putting it inside of a conditional or, alternately, 2) add an `else` to the existing condition which checks that the reactor installed previously is in fact an `asyncioreactor`.
else:
from twisted.internet import reactor
if not isinstance(reactor, asyncioreactor.AsyncioSelectorReactor) and getattr(sys, 'frozen', False):
# pyinstaller hooks install the default reactor before
# any of our code runs, see kivy for similar problem:
# https://github.com/kivy/kivy/issues/4182
del sys.modules['twisted.internet.reactor']
asyncioreactor.install()
from twisted.internet import reactor
import keyring.backend
import platform
import ssl
from jnius import autoclass
# Fixes / patches / overrides
# platform.platform() in libc_ver: IOError: [Errno 21] Is a directory
from jnius import autoclass
lbrynet_utils = autoclass('io.lbry.browser.Utils')
service = autoclass('io.lbry.browser.LbrynetService').serviceInstance
platform.platform = lambda: 'Android %s (API %s)' % (lbrynet_utils.getAndroidRelease(), lbrynet_utils.getAndroidSdk())
@ -76,7 +90,7 @@ keyring.set_keyring(LbryAndroidKeyring())
import logging.handlers
from lbrynet.core import log_support
from twisted.internet import defer, reactor
from twisted.internet import reactor
from lbrynet import analytics
from lbrynet import conf