Cross Reference: invoke.c
xref
: /
openjdk7
/
hotspot
/
test
/
runtime
/
6929067
/
invoke.c
Home
History
Annotate
Line#
Navigate
Download
Search
only in
./
invoke.c revision 1320
1320
N/A
#
include
<
assert.h
>
1320
N/A
#
include
<
jni.h
>
1320
N/A
#
include
<
alloca.h
>
1320
N/A
1320
N/A
#
include
<
pthread.h
>
1320
N/A
1320
N/A
union
env_union
1320
N/A
{
1320
N/A
void
*
void_env
;
1320
N/A
JNIEnv
*
jni_env
;
1320
N/A
};
1320
N/A
1320
N/A
union
env_union
tmp
;
1320
N/A
JNIEnv
*
env
;
1320
N/A
JavaVM
*
jvm
;
1320
N/A
JavaVMInitArgs
vm_args
;
1320
N/A
JavaVMOption
options
[
1
];
1320
N/A
jclass
class_id
;
1320
N/A
jmethodID
method_id
;
1320
N/A
jint
result
;
1320
N/A
1320
N/A
long
product
(
unsigned
long
n,
unsigned
long
m) {
1320
N/A
if
(m ==
1
) {
1320
N/A
return
n;
1320
N/A
}
else
{
1320
N/A
int
*p =
alloca
(
sizeof
(
int
));
1320
N/A
*p = n;
1320
N/A
return
product
(n, m-
1
) + *p;
1320
N/A
}
1320
N/A
}
1320
N/A
1320
N/A
void
*
1320
N/A
floobydust
(
void
*p)
1320
N/A
{
1320
N/A
(*
jvm
)->
AttachCurrentThread
(
jvm
, &
tmp
.
void_env
,
NULL
);
1320
N/A
env
=
tmp
.
jni_env
;
1320
N/A
1320
N/A
class_id
= (*
env
)->
FindClass
(
env
,
"T"
);
1320
N/A
assert
(
class_id
);
1320
N/A
1320
N/A
method_id
= (*
env
)->
GetStaticMethodID
(
env
,
class_id
,
"printIt"
,
"()V"
);
1320
N/A
assert
(
method_id
);
1320
N/A
1320
N/A
(*
env
)->
CallStaticVoidMethod
(
env
,
class_id
,
method_id
,
NULL
);
1320
N/A
1320
N/A
(*
jvm
)->
DetachCurrentThread
(
jvm
);
1320
N/A
1320
N/A
printf
(
"%ld\n"
,
product
(
5000
,
5000
));
1320
N/A
1320
N/A
(*
jvm
)->
AttachCurrentThread
(
jvm
, &
tmp
.
void_env
,
NULL
);
1320
N/A
env
=
tmp
.
jni_env
;
1320
N/A
1320
N/A
class_id
= (*
env
)->
FindClass
(
env
,
"T"
);
1320
N/A
assert
(
class_id
);
1320
N/A
1320
N/A
method_id
= (*
env
)->
GetStaticMethodID
(
env
,
class_id
,
"printIt"
,
"()V"
);
1320
N/A
assert
(
method_id
);
1320
N/A
1320
N/A
(*
env
)->
CallStaticVoidMethod
(
env
,
class_id
,
method_id
,
NULL
);
1320
N/A
1320
N/A
(*
jvm
)->
DetachCurrentThread
(
jvm
);
1320
N/A
1320
N/A
printf
(
"%ld\n"
,
product
(
5000
,
5000
));
1320
N/A
1320
N/A
return
NULL
;
1320
N/A
}
1320
N/A
1320
N/A
int
1320
N/A
main
(
int
argc
,
const
char
**
argv
)
1320
N/A
{
1320
N/A
options
[0].
optionString
=
"-Xss320k"
;
1320
N/A
1320
N/A
vm_args
.
version
=
JNI_VERSION_1_2
;
1320
N/A
vm_args
.
ignoreUnrecognized
=
JNI_TRUE
;
1320
N/A
vm_args
.
options
=
options
;
1320
N/A
vm_args
.
nOptions
=
1
;
1320
N/A
1320
N/A
result
=
JNI_CreateJavaVM
(&
jvm
, &
tmp
.
void_env
, &
vm_args
);
1320
N/A
assert
(
result
>= 0);
1320
N/A
1320
N/A
env
=
tmp
.
jni_env
;
1320
N/A
1320
N/A
floobydust
(
NULL
);
1320
N/A
1320
N/A
pthread_t
thr
;
1320
N/A
pthread_create
(&
thr
,
NULL
,
floobydust
,
NULL
);
1320
N/A
pthread_join
(
thr
,
NULL
);
1320
N/A
1320
N/A
return
0;
1320
N/A
}