@@ -102,6 +102,7 @@ Java_java_lang_StackWalker_walkWrapperImpl(JNIEnv *env, jclass clazz, jint flags
102
102
J9StackWalkState *walkState = vmThread->stackWalkState ;
103
103
104
104
Assert_JCL_notNull (stackWalkerMethod);
105
+ /* Consume thread's stateWalkState, push a new entry to thread for use during Java callout. */
105
106
memset (&newWalkState, 0 , sizeof (J9StackWalkState));
106
107
newWalkState.previous = walkState;
107
108
vmThread->stackWalkState = &newWalkState;
@@ -146,11 +147,12 @@ Java_java_lang_StackWalker_walkWrapperImpl(JNIEnv *env, jclass clazz, jint flags
146
147
if (NULL == walkerMethodChars) { /* native out of memory exception pending */
147
148
return NULL ;
148
149
}
150
+ /* Ensure userData1/2 used by stackFrameFilter function is set properly. */
151
+ walkState->userData1 = (void *)(UDATA)flags;
149
152
walkState->userData2 = (void *)walkerMethodChars;
150
153
UDATA walkStateResult = vm->walkStackFrames (vmThread, walkState);
151
154
Assert_JCL_true (walkStateResult == J9_STACKWALK_RC_NONE);
152
155
walkState->flags |= J9_STACKWALK_RESUME;
153
- walkState->userData1 = (void *)(UDATA)flags;
154
156
if (J9SF_FRAME_TYPE_END_OF_STACK != walkState->pc ) {
155
157
/* indicate the we have the topmost client method's frame */
156
158
walkState->userData1 = (void *)((UDATA)walkState->userData1 | J9_FRAME_VALID);
@@ -210,11 +212,12 @@ Java_java_lang_StackWalker_walkContinuationImpl(JNIEnv *env, jclass clazz, jint
210
212
walkState.frameWalkFunction = stackFrameFilter;
211
213
212
214
/* walking unmounted Continuation will not require skipping StackWalker methods */
215
+ walkState.userData1 = (void *)(UDATA)flags;
213
216
walkState.userData2 = NULL ;
214
217
UDATA walkStateResult = vm->walkStackFrames (vmThread, &walkState);
215
218
Assert_JCL_true (walkStateResult == J9_STACKWALK_RC_NONE);
216
219
walkState.flags |= J9_STACKWALK_RESUME;
217
- walkState. userData1 = ( void *)(UDATA)flags;
220
+
218
221
if (J9SF_FRAME_TYPE_END_OF_STACK != walkState.pc ) {
219
222
/* indicate the we have the topmost client method's frame */
220
223
walkState.userData1 = (void *)((UDATA)walkState.userData1 | J9_FRAME_VALID);
0 commit comments