Yogesh Gaikwad created DIRMINA-1093:
---------------------------------------

             Summary: Ignore SME just like CNFE while checking deadlock in 
DefaultIoFuture
                 Key: DIRMINA-1093
                 URL: https://issues.apache.org/jira/browse/DIRMINA-1093
             Project: MINA
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.0.19, 3.0.0-M2, 2.0.17
         Environment: Applicable to all platforms
            Reporter: Yogesh Gaikwad


The problem occurs when we have a security manager enabled with restrictions.

After writing a request to 
[LdapNetworkConnection|https://github.com/apache/directory-ldap-api/blob/52129503d7f2247bad4a5f73b234023b8158ff07/ldap/client/api/src/main/java/org/apache/directory/ldap/client/api/LdapNetworkConnection.java#L4934],
 we wait for the completion of the request. For every 
{code:java}writeFuture.awaitUninterruptibly{code} it checks for deadlock 
[DefaultIoFuture|https://mina.apache.org/mina-project/apidocs/src-html/org/apache/mina/core/future/DefaultIoFuture.html]#checkDeadLock()
 which is code that requires security permissions and throws following 
exception:
{code:java}java.security.AccessControlException: access denied 
("java.lang.RuntimePermission" "accessClassInPackage.sun.reflect"){code}

A proposed solution would be to ignore Java security manager exception (SME) 
similar to Class not found exception(CNFE). For CNFE, we ignore the exception 
and continue as we are just testing for deadlocks.

{code:java}
for (StackTraceElement s : stackTrace) {
         try {
                Class<?> cls = 
DefaultIoFuture.class.getClassLoader().loadClass(s.getClassName());
                
                if (IoProcessor.class.isAssignableFrom(cls)) {
                    throw new IllegalStateException("DEAD LOCK: " + 
IoFuture.class.getSimpleName()
                            + ".await() was invoked from an I/O processor 
thread.  " + "Please use "
                            + IoFutureListener.class.getSimpleName()
                            + " or configure a proper thread model 
alternatively.");
                }
            } catch (ClassNotFoundException cnfe) {
                // Ignore
            }
        }
{code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to