@@ -6,6 +6,7 @@ import 'package:sane/src/isolate_messages/cancel.dart';
66import 'package:sane/src/isolate_messages/close.dart' ;
77import 'package:sane/src/isolate_messages/control_button_option.dart' ;
88import 'package:sane/src/isolate_messages/control_option.dart' ;
9+ import 'package:sane/src/isolate_messages/exception.dart' ;
910import 'package:sane/src/isolate_messages/exit.dart' ;
1011import 'package:sane/src/isolate_messages/get_all_option_descriptors.dart' ;
1112import 'package:sane/src/isolate_messages/get_devices.dart' ;
@@ -57,6 +58,13 @@ class SaneIsolate implements Sane {
5758 final response = await replyPort.first;
5859 replyPort.close ();
5960
61+ if (response is ExceptionResponse ) {
62+ Error .throwWithStackTrace (
63+ response.exception,
64+ response.stackTrace,
65+ );
66+ }
67+
6068 return response;
6169 }
6270
@@ -300,9 +308,17 @@ void _isolateEntryPoint(_IsolateEntryPointArgs args) {
300308 isolateReceivePort.listen ((envellope) async {
301309 envellope = envellope as _IsolateMessageEnveloppe ;
302310
303- envellope.replyPort.send (
304- await envellope.message.handle (sane),
305- );
311+ late IsolateResponse response;
312+ try {
313+ response = await envellope.message.handle (sane);
314+ } on SaneException catch (exception, stackTrace) {
315+ response = ExceptionResponse (
316+ exception: exception,
317+ stackTrace: stackTrace,
318+ );
319+ }
320+
321+ envellope.replyPort.send (response);
306322 });
307323}
308324
0 commit comments