javauis/mmapi_akn/baseline/javasrc.emc/com/nokia/microedition/media/ManagerImpl.java
branchRCL_3
changeset 71 d5e927d5853b
parent 19 04becd199f91
child 83 26b2b12093af
--- a/javauis/mmapi_akn/baseline/javasrc.emc/com/nokia/microedition/media/ManagerImpl.java	Wed Sep 01 12:33:18 2010 +0100
+++ b/javauis/mmapi_akn/baseline/javasrc.emc/com/nokia/microedition/media/ManagerImpl.java	Tue Sep 14 21:06:50 2010 +0300
@@ -33,6 +33,7 @@
 import com.nokia.microedition.media.tone.PlayToneImpl;
 import com.nokia.microedition.volumekeys.ForegroundListener;
 import com.nokia.mj.impl.rt.support.Finalizer;
+import com.nokia.mj.impl.utils.Logger;
 
 /**
  * ManagerImpl implements the functionality specified in
@@ -56,6 +57,7 @@
     private final ProtocolFactory iProtocolFactory = new ProtocolFactory();
     private final ForegroundListener iForegroundListener;
 
+    private boolean iClosed = false;
     private Finalizer mFinalizer = new Finalizer()
     {
         public void finalizeImpl()
@@ -166,6 +168,17 @@
         iPlugIns.addElement(aPlugIn);
     }
 
+    private void checkClose() throws MediaException
+    {
+        if (iClosed)
+        {
+            MediaException me = new MediaException("MIDlet closed.");
+            Logger.LOG(Logger.EJavaMMAPI, Logger.EInfo,
+                       "Trying to create player when MIDlet is destroyed ", me);
+            throw me;
+        }
+    }
+
     private void doFinalize()
     {
         if (mFinalizer != null)
@@ -180,6 +193,7 @@
      */
     synchronized final void registeredFinalize()
     {
+        iClosed = true;
         _dispose(sEventSourceHandle);
         sEventSourceHandle = 0;
     }
@@ -191,6 +205,7 @@
      */
     synchronized final void release()
     {
+        iClosed = true;
         _release(sEventSourceHandle);
     }
 
@@ -348,9 +363,10 @@
     /**
      * From PlugIn.
      */
-    public InternalPlayer createPlayer(DataSource aSource)
+    public synchronized InternalPlayer createPlayer(DataSource aSource)
     throws MediaException, IOException
     {
+        checkClose();
         InternalPlayer player = null;
         if (aSource.getContentType() != null)
         {
@@ -424,9 +440,10 @@
      * @exception SecurityException Thrown if the caller does not
      * have security permission to create the <code>Player</code>.
      */
-    public Player createPlayer(String aLocator)
+    public synchronized Player createPlayer(String aLocator)
     throws IOException, MediaException
     {
+        checkClose();
         if (aLocator == null)
         {
             throw new IllegalArgumentException("Locator is null.");
@@ -519,9 +536,10 @@
      * @exception SecurityException Thrown if the caller does not
      * have security permission to create the <code>Player</code>.
      */
-    public Player createPlayer(InputStream aStream, String aType)
+    public synchronized Player createPlayer(InputStream aStream, String aType)
     throws IOException, MediaException
     {
+        checkClose();
         if (aStream == null)
         {
             throw new IllegalArgumentException("InputStream is null.");