remove wakelocks in XmlReader

This commit is contained in:
Daniel Gultsch 2018-01-21 12:26:16 +01:00
parent 42c807ead8
commit f2bbb6087c
2 changed files with 3 additions and 33 deletions

View file

@ -1,7 +1,5 @@
package eu.siacs.conversations.xml; package eu.siacs.conversations.xml;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log; import android.util.Log;
import android.util.Xml; import android.util.Xml;
@ -16,17 +14,15 @@ import eu.siacs.conversations.Config;
public class XmlReader { public class XmlReader {
private XmlPullParser parser; private XmlPullParser parser;
private PowerManager.WakeLock wakeLock;
private InputStream is; private InputStream is;
public XmlReader(WakeLock wakeLock) { public XmlReader() {
this.parser = Xml.newPullParser(); this.parser = Xml.newPullParser();
try { try {
this.parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); this.parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);
} catch (XmlPullParserException e) { } catch (XmlPullParserException e) {
Log.d(Config.LOGTAG, "error setting namespace feature on parser"); Log.d(Config.LOGTAG, "error setting namespace feature on parser");
} }
this.wakeLock = wakeLock;
} }
public void setInputStream(InputStream inputStream) throws IOException { public void setInputStream(InputStream inputStream) throws IOException {
@ -53,16 +49,8 @@ public class XmlReader {
} }
public Tag readTag() throws XmlPullParserException, IOException { public Tag readTag() throws XmlPullParserException, IOException {
if (wakeLock.isHeld()) {
try {
wakeLock.release();
} catch (RuntimeException re) {
Log.d(Config.LOGTAG,"runtime exception releasing wakelock before reading tag "+re.getMessage());
}
}
try { try {
while (this.is != null && parser.next() != XmlPullParser.END_DOCUMENT) { while (this.is != null && parser.next() != XmlPullParser.END_DOCUMENT) {
wakeLock.acquire();
if (parser.getEventType() == XmlPullParser.START_TAG) { if (parser.getEventType() == XmlPullParser.START_TAG) {
Tag tag = Tag.start(parser.getName()); Tag tag = Tag.start(parser.getName());
final String xmlns = parser.getNamespace(); final String xmlns = parser.getNamespace();
@ -89,14 +77,6 @@ public class XmlReader {
} catch (Throwable throwable) { } catch (Throwable throwable) {
throw new IOException("xml parser mishandled "+throwable.getClass().getSimpleName()+"("+throwable.getMessage()+")", throwable); throw new IOException("xml parser mishandled "+throwable.getClass().getSimpleName()+"("+throwable.getMessage()+")", throwable);
} finally {
if (wakeLock.isHeld()) {
try {
wakeLock.release();
} catch (RuntimeException re) {
Log.d(Config.LOGTAG,"runtime exception releasing wakelock after exception "+re.getMessage());
}
}
} }
return null; return null;
} }

View file

@ -2,8 +2,6 @@ package eu.siacs.conversations.xmpp;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.os.SystemClock; import android.os.SystemClock;
import android.security.KeyChain; import android.security.KeyChain;
import android.util.Base64; import android.util.Base64;
@ -105,7 +103,6 @@ public class XmppConnection implements Runnable {
private static final int PACKET_MESSAGE = 1; private static final int PACKET_MESSAGE = 1;
private static final int PACKET_PRESENCE = 2; private static final int PACKET_PRESENCE = 2;
protected final Account account; protected final Account account;
private final WakeLock wakeLock;
private Socket socket; private Socket socket;
private XmlReader tagReader; private XmlReader tagReader;
private TagWriter tagWriter = new TagWriter(); private TagWriter tagWriter = new TagWriter();
@ -224,7 +221,6 @@ public class XmppConnection implements Runnable {
public XmppConnection(final Account account, final XmppConnectionService service) { public XmppConnection(final Account account, final XmppConnectionService service) {
this.account = account; this.account = account;
final String tag = account.getJid().toBareJid().toPreppedString(); final String tag = account.getJid().toBareJid().toPreppedString();
this.wakeLock = service.getPowerManager().newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, tag == null ? "[empty bare jid]" : tag);
mXmppConnectionService = service; mXmppConnectionService = service;
} }
@ -439,14 +435,8 @@ public class XmppConnection implements Runnable {
} finally { } finally {
if (!Thread.currentThread().isInterrupted()) { if (!Thread.currentThread().isInterrupted()) {
forceCloseSocket(); forceCloseSocket();
if (wakeLock.isHeld()) {
try {
wakeLock.release();
} catch (final RuntimeException ignored) {
}
}
} else { } else {
Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": not force closing socket and releasing wake lock (is held=" + wakeLock.isHeld() + ") because thread was interrupted"); Log.d(Config.LOGTAG, account.getJid().toBareJid() + ": not force closing socket because thread was interrupted");
} }
} }
} }
@ -461,7 +451,7 @@ public class XmppConnection implements Runnable {
throw new InterruptedException(); throw new InterruptedException();
} }
this.socket = socket; this.socket = socket;
tagReader = new XmlReader(wakeLock); tagReader = new XmlReader();
if (tagWriter != null) { if (tagWriter != null) {
tagWriter.forceClose(); tagWriter.forceClose();
} }