Return-Path: Delivered-To: apmail-harmony-commits-archive@www.apache.org Received: (qmail 99157 invoked from network); 22 Jun 2007 17:02:39 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 22 Jun 2007 17:02:39 -0000 Received: (qmail 48850 invoked by uid 500); 22 Jun 2007 17:02:43 -0000 Delivered-To: apmail-harmony-commits-archive@harmony.apache.org Received: (qmail 48761 invoked by uid 500); 22 Jun 2007 17:02:42 -0000 Mailing-List: contact commits-help@harmony.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@harmony.apache.org Delivered-To: mailing list commits@harmony.apache.org Received: (qmail 48752 invoked by uid 99); 22 Jun 2007 17:02:42 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Jun 2007 10:02:42 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 22 Jun 2007 10:02:38 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 85F1B1A981A; Fri, 22 Jun 2007 10:02:18 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r549879 - in /harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang: Thread.java VMThreadManager.java Date: Fri, 22 Jun 2007 17:02:18 -0000 To: commits@harmony.apache.org From: wjwashburn@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070622170218.85F1B1A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: wjwashburn Date: Fri Jun 22 10:02:17 2007 New Revision: 549879 URL: http://svn.apache.org/viewvc?view=rev&rev=549879 Log: harmony-4158: this patch eliminates unexpected InternalError exception when Thread.suspend() is called Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/Thread.java harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/Thread.java URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/Thread.java?view=diff&rev=549879&r1=549878&r2=549879 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/Thread.java (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/Thread.java Fri Jun 22 10:02:17 2007 @@ -865,12 +865,23 @@ * @deprecated */ public final void suspend() { - checkAccess(); - int status = VMThreadManager.suspend(this); - if (status != VMThreadManager.TM_ERROR_NONE) { - throw new InternalError( - "Thread Manager internal error " + status); - } + int status; + + checkAccess(); + + // We can receive EBUSY from VMThreadManager.suspend() if we are + // requested to suspend ourselves. If we are requested to suspend we + // cannot to suspend other threads, so we need to try to suspend + // again. + + do { + status = VMThreadManager.suspend(this); + } while (status == VMThreadManager.TM_ERROR_EBUSY); + + if (status != VMThreadManager.TM_ERROR_NONE) { + throw new InternalError( + "Thread Manager internal error " + status); + } } /** Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java?view=diff&rev=549879&r1=549878&r2=549879 ============================================================================== --- harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java (original) +++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/kernel_classes/javasrc/java/lang/VMThreadManager.java Fri Jun 22 10:02:17 2007 @@ -43,7 +43,7 @@ public static final int TM_ERROR_NONE = 0; public static final int TM_ERROR_INTERRUPT = 52; public static final int TM_ERROR_ILLEGAL_STATE = 51; - + public static final int TM_ERROR_EBUSY = 70025; /** * JVMTI constants