libbluray | branch: master | hpi1 <[email protected]> | Mon Mar 23 10:27:29 2015 +0200| [074c21806ca9e0687a8ab951edc49e04f1c4d471] | committer: hpi1
MountManager: handle mount requests in privileged thread > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=074c21806ca9e0687a8ab951edc49e04f1c4d471 --- .../bdj/java/org/videolan/MountManager.java | 47 ++++++++++++++------ 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/libbluray/bdj/java/org/videolan/MountManager.java b/src/libbluray/bdj/java/org/videolan/MountManager.java index a49b39d..368f3a0 100644 --- a/src/libbluray/bdj/java/org/videolan/MountManager.java +++ b/src/libbluray/bdj/java/org/videolan/MountManager.java @@ -45,19 +45,8 @@ public class MountManager { /* called from org/dvb/dsmcc/ServiceDomain */ public static String mount(int jarId) throws MountException { - final int id = jarId; - Object obj = null; - try { - obj = AccessController.doPrivileged( - new PrivilegedExceptionAction() { - public Object run() throws MountException { - return mount(id, true); - } - }); - } catch (PrivilegedActionException e) { - throw (MountException) e.getException(); - } - return (String)obj; + /* dispatch mount request to privileged thread */ + return new MountAction(jarId).execute(); } /* package private, called from BDJXletContext */ @@ -289,4 +278,36 @@ public class MountManager { private int refCount; private boolean classFiles; }; + + private static class MountAction extends BDJAction { + public MountAction(int jarId) { + this.jarId = jarId; + } + + protected void doAction() { + try { + this.mountPoint = (String)AccessController.doPrivileged( + new PrivilegedExceptionAction() { + public Object run() throws MountException { + return mount(jarId, true); + } + }); + } catch (PrivilegedActionException e) { + this.exception = (MountException) e.getException(); + } + } + + public String execute() throws MountException { + BDJActionManager.getInstance().putCommand(this); + waitEnd(); + if (exception != null) { + throw exception; + } + return mountPoint; + } + + private final int jarId; + private String mountPoint = null; + private MountException exception = null; + } } _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
