Avoid server stacktraces on close
On close, the socket is closed by the client, and the server process is killed. This leads to (expected) exceptions, that should not be printed.
This commit is contained in:
parent
2fdc368c41
commit
c683872bbc
1 changed files with 10 additions and 2 deletions
|
@ -1,6 +1,7 @@
|
||||||
package com.genymobile.scrcpy;
|
package com.genymobile.scrcpy;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
public final class ScrCpyServer {
|
public final class ScrCpyServer {
|
||||||
|
|
||||||
|
@ -20,7 +21,7 @@ public final class ScrCpyServer {
|
||||||
// synchronous
|
// synchronous
|
||||||
screenEncoder.streamScreen(device, connection.getOutputStream());
|
screenEncoder.streamScreen(device, connection.getOutputStream());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Ln.e("Screen streaming interrupted", e);
|
Ln.w("Screen streaming stopped");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,7 +33,7 @@ public final class ScrCpyServer {
|
||||||
try {
|
try {
|
||||||
new EventController(device, connection).control();
|
new EventController(device, connection).control();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Ln.e("Exception from event controller", e);
|
Ln.w("Event controller stopped");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).start();
|
}).start();
|
||||||
|
@ -60,6 +61,13 @@ public final class ScrCpyServer {
|
||||||
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
||||||
@Override
|
@Override
|
||||||
public void uncaughtException(Thread t, Throwable e) {
|
public void uncaughtException(Thread t, Throwable e) {
|
||||||
|
if (e instanceof AssertionError && e.getCause() instanceof InvocationTargetException) {
|
||||||
|
// WORKAROUND
|
||||||
|
// When we call a method of the framework by reflection, it may throw an InvocationTargetException
|
||||||
|
// (that we wrap into an AssertionError) if this process is being killed.
|
||||||
|
// To avoid the stacktrace on close, do not log these errors.
|
||||||
|
return;
|
||||||
|
}
|
||||||
Ln.e("Exception on thread " + t, e);
|
Ln.e("Exception on thread " + t, e);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue