41 |
package gnu.classpath.jdwp.processor; |
package gnu.classpath.jdwp.processor; |
42 |
|
|
43 |
import gnu.classpath.jdwp.JdwpConstants; |
import gnu.classpath.jdwp.JdwpConstants; |
44 |
|
import gnu.classpath.jdwp.VMVirtualMachine; |
45 |
import gnu.classpath.jdwp.exception.InvalidFieldException; |
import gnu.classpath.jdwp.exception.InvalidFieldException; |
46 |
import gnu.classpath.jdwp.exception.JdwpException; |
import gnu.classpath.jdwp.exception.JdwpException; |
47 |
import gnu.classpath.jdwp.exception.JdwpInternalErrorException; |
import gnu.classpath.jdwp.exception.JdwpInternalErrorException; |
189 |
{ |
{ |
190 |
values[i] = Value.getObj(bb); |
values[i] = Value.getObj(bb); |
191 |
} |
} |
192 |
boolean suspendSuccess = false; |
|
193 |
int invokeOpts = bb.getInt(); |
int invokeOpts = bb.getInt(); |
194 |
|
boolean suspend = ((invokeOpts |
195 |
|
& JdwpConstants.InvokeOptions.INVOKE_SINGLE_THREADED) |
196 |
|
!= 0); |
197 |
try |
try |
198 |
{ |
{ |
199 |
if ((invokeOpts & JdwpConstants.InvokeOptions.INVOKE_SINGLE_THREADED) |
if (suspend) |
200 |
!= 0) |
VMVirtualMachine.suspendAllThreads (); |
201 |
{ |
|
202 |
// We must suspend all running threads first |
MethodResult mr = VMVirtualMachine.executeMethod(null, thread, |
203 |
suspendSuccess = vm.suspendAllThreadsExcept(Thread.currentThread(). |
clazz, method, |
204 |
getThreadGroup()); |
values, false); |
205 |
} |
if (suspend) |
206 |
MethodResult mr = vm.executeMethod(null, thread, clazz, method, values, |
VMVirtualMachine.resumeAllThreads (); |
207 |
false); |
|
|
if (suspendSuccess) |
|
|
{ // We must call resume if we suspended threads |
|
|
suspendSuccess = false; |
|
|
vm.resumeAllThreadsExcept(Thread.currentThread().getThreadGroup()); |
|
|
} |
|
208 |
return mr; |
return mr; |
209 |
} |
} |
210 |
catch (Exception ex) |
catch (Exception ex) |
211 |
{ |
{ |
212 |
if (suspendSuccess) |
if (suspend) |
213 |
{ // We must call resume if we suspended threads |
VMVirtualMachine.resumeAllThreads (); |
214 |
vm.resumeAllThreadsExcept(Thread.currentThread().getThreadGroup()); |
|
|
} |
|
215 |
throw new JdwpInternalErrorException(ex); |
throw new JdwpInternalErrorException(ex); |
216 |
} |
} |
217 |
} |
} |