提交 eec6dacb 编写于 作者: X xwhqsj

update

上级 ae823bf9
......@@ -17,8 +17,8 @@ add_executable(main jni.h jni_md.h tpool.cpp tpool.h
# main.cpp
# multithread.cpp
threadpool.cpp
client.cpp
server.cpp)
# server.cpp
)
target_link_libraries(main /usr/local/java/jre/lib/amd64/server/libjvm.so /usr/lib/x86_64-linux-gnu/libpthread.so)
......@@ -51,4 +51,7 @@ int main()
read(sock, buffer, 1024);
printf("%s\n", buffer);
close(sock);
}
......@@ -71,7 +71,7 @@ CMAKE_BINARY_DIR = /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug
CMakeFiles/main.dir/all:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/depend
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=1,2,3,4,5 "Built target main"
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=1,2,3 "Built target main"
.PHONY : CMakeFiles/main.dir/all
# Include target in all.
......@@ -81,7 +81,7 @@ all: CMakeFiles/main.dir/all
# Build rule for subdir invocation for target.
CMakeFiles/main.dir/rule: cmake_check_build_system
$(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 5
$(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 3
$(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/main.dir/all
$(CMAKE_COMMAND) -E cmake_progress_start /home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles 0
.PHONY : CMakeFiles/main.dir/rule
......
......@@ -6,17 +6,39 @@
#IncludeRegexTransform:
/home/wanhui/CallJvm/callJvmThreadpool/client.cpp
stdio.h
-
sys/socket.h
/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp
cstdio
-
arpa/inet.h
cstdlib
-
unistd.h
-
string.h
sys/socket.h
-
netinet/in.h
-
cstring
-
iostream
-
vector
-
jni.h
-
tpool.h
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
pthread.h
-
/usr/local/java/include/jni.h
stdio.h
-
stdarg.h
-
jni_md.h
/usr/local/java/include/jni_md.h
/usr/local/java/include/linux/jni_md.h
......@@ -4,8 +4,6 @@ set(CMAKE_DEPENDS_LANGUAGES
)
# The set of files for implicit dependencies of each language:
set(CMAKE_DEPENDS_CHECK_CXX
"/home/wanhui/CallJvm/callJvmThreadpool/client.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/client.cpp.o"
"/home/wanhui/CallJvm/callJvmThreadpool/server.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/server.cpp.o"
"/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/threadpool.cpp.o"
"/home/wanhui/CallJvm/callJvmThreadpool/tpool.cpp" "/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles/main.dir/tpool.cpp.o"
)
......
......@@ -83,51 +83,21 @@ CMakeFiles/main.dir/threadpool.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/threadpool.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp -o CMakeFiles/main.dir/threadpool.cpp.s
CMakeFiles/main.dir/client.cpp.o: CMakeFiles/main.dir/flags.make
CMakeFiles/main.dir/client.cpp.o: ../client.cpp
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/main.dir/client.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/main.dir/client.cpp.o -c /home/wanhui/CallJvm/callJvmThreadpool/client.cpp
CMakeFiles/main.dir/client.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/main.dir/client.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/wanhui/CallJvm/callJvmThreadpool/client.cpp > CMakeFiles/main.dir/client.cpp.i
CMakeFiles/main.dir/client.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/client.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/client.cpp -o CMakeFiles/main.dir/client.cpp.s
CMakeFiles/main.dir/server.cpp.o: CMakeFiles/main.dir/flags.make
CMakeFiles/main.dir/server.cpp.o: ../server.cpp
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/main.dir/server.cpp.o"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/main.dir/server.cpp.o -c /home/wanhui/CallJvm/callJvmThreadpool/server.cpp
CMakeFiles/main.dir/server.cpp.i: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/main.dir/server.cpp.i"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/wanhui/CallJvm/callJvmThreadpool/server.cpp > CMakeFiles/main.dir/server.cpp.i
CMakeFiles/main.dir/server.cpp.s: cmake_force
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/main.dir/server.cpp.s"
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/wanhui/CallJvm/callJvmThreadpool/server.cpp -o CMakeFiles/main.dir/server.cpp.s
# Object files for target main
main_OBJECTS = \
"CMakeFiles/main.dir/tpool.cpp.o" \
"CMakeFiles/main.dir/threadpool.cpp.o" \
"CMakeFiles/main.dir/client.cpp.o" \
"CMakeFiles/main.dir/server.cpp.o"
"CMakeFiles/main.dir/threadpool.cpp.o"
# External object files for target main
main_EXTERNAL_OBJECTS =
main: CMakeFiles/main.dir/tpool.cpp.o
main: CMakeFiles/main.dir/threadpool.cpp.o
main: CMakeFiles/main.dir/client.cpp.o
main: CMakeFiles/main.dir/server.cpp.o
main: CMakeFiles/main.dir/build.make
main: /usr/local/java/jre/lib/amd64/server/libjvm.so
main: /usr/lib/x86_64-linux-gnu/libpthread.so
main: CMakeFiles/main.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Linking CXX executable main"
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/wanhui/CallJvm/callJvmThreadpool/cmake-build-debug/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Linking CXX executable main"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/main.dir/link.txt --verbose=$(VERBOSE)
# Rule to build all files generated by this target.
......
file(REMOVE_RECURSE
"CMakeFiles/main.dir/tpool.cpp.o"
"CMakeFiles/main.dir/threadpool.cpp.o"
"CMakeFiles/main.dir/client.cpp.o"
"CMakeFiles/main.dir/server.cpp.o"
"main.pdb"
"main"
)
......
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.14
CMakeFiles/main.dir/client.cpp.o
/home/wanhui/CallJvm/callJvmThreadpool/client.cpp
CMakeFiles/main.dir/threadpool.cpp.o
/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
/usr/local/java/include/jni.h
/usr/local/java/include/linux/jni_md.h
CMakeFiles/main.dir/tpool.cpp.o
/home/wanhui/CallJvm/callJvmThreadpool/tpool.cpp
/home/wanhui/CallJvm/callJvmThreadpool/tpool.h
# CMAKE generated file: DO NOT EDIT!
# Generated by "Unix Makefiles" Generator, CMake Version 3.14
CMakeFiles/main.dir/client.cpp.o: ../client.cpp
CMakeFiles/main.dir/threadpool.cpp.o: ../threadpool.cpp
CMakeFiles/main.dir/threadpool.cpp.o: ../tpool.h
CMakeFiles/main.dir/threadpool.cpp.o: /usr/local/java/include/jni.h
CMakeFiles/main.dir/threadpool.cpp.o: /usr/local/java/include/linux/jni_md.h
CMakeFiles/main.dir/tpool.cpp.o: ../tpool.cpp
CMakeFiles/main.dir/tpool.cpp.o: ../tpool.h
......
/usr/bin/c++ -g CMakeFiles/main.dir/tpool.cpp.o CMakeFiles/main.dir/threadpool.cpp.o CMakeFiles/main.dir/client.cpp.o CMakeFiles/main.dir/server.cpp.o -o main -Wl,-rpath,/usr/local/java/jre/lib/amd64/server /usr/local/java/jre/lib/amd64/server/libjvm.so -lpthread
/usr/bin/c++ -g CMakeFiles/main.dir/tpool.cpp.o CMakeFiles/main.dir/threadpool.cpp.o -o main -Wl,-rpath,/usr/local/java/jre/lib/amd64/server /usr/local/java/jre/lib/amd64/server/libjvm.so -lpthread
CMAKE_PROGRESS_1 = 1
CMAKE_PROGRESS_2 = 2
CMAKE_PROGRESS_3 = 3
CMAKE_PROGRESS_4 = 4
CMAKE_PROGRESS_5 = 5
......@@ -123,60 +123,6 @@ main/fast:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/build
.PHONY : main/fast
client.o: client.cpp.o
.PHONY : client.o
# target to build an object file
client.cpp.o:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/client.cpp.o
.PHONY : client.cpp.o
client.i: client.cpp.i
.PHONY : client.i
# target to preprocess a source file
client.cpp.i:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/client.cpp.i
.PHONY : client.cpp.i
client.s: client.cpp.s
.PHONY : client.s
# target to generate assembly for a file
client.cpp.s:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/client.cpp.s
.PHONY : client.cpp.s
server.o: server.cpp.o
.PHONY : server.o
# target to build an object file
server.cpp.o:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/server.cpp.o
.PHONY : server.cpp.o
server.i: server.cpp.i
.PHONY : server.i
# target to preprocess a source file
server.cpp.i:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/server.cpp.i
.PHONY : server.cpp.i
server.s: server.cpp.s
.PHONY : server.s
# target to generate assembly for a file
server.cpp.s:
$(MAKE) -f CMakeFiles/main.dir/build.make CMakeFiles/main.dir/server.cpp.s
.PHONY : server.cpp.s
threadpool.o: threadpool.cpp.o
.PHONY : threadpool.o
......@@ -240,12 +186,6 @@ help:
@echo "... rebuild_cache"
@echo "... main"
@echo "... edit_cache"
@echo "... client.o"
@echo "... client.i"
@echo "... client.s"
@echo "... server.o"
@echo "... server.i"
@echo "... server.s"
@echo "... threadpool.o"
@echo "... threadpool.i"
@echo "... threadpool.s"
......
......@@ -96,18 +96,12 @@
</MakeCommands>
</Target>
</Build>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/client.cpp">
<Option target="main"/>
</Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/jni.h">
<Option target="main"/>
</Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/jni_md.h">
<Option target="main"/>
</Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/server.cpp">
<Option target="main"/>
</Unit>
<Unit filename="/home/wanhui/CallJvm/callJvmThreadpool/threadpool.cpp">
<Option target="main"/>
</Unit>
......
此差异已折叠。
#
# A fatal error has been detected by the Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x0000564b4bda0be4, pid=12890, tid=0x00007fcbf2b2c700
#
# JRE version: Java(TM) SE Runtime Environment (8.0_221-b11) (build 1.8.0_221-b11)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.221-b11 interpreted mode linux-amd64 compressed oops)
# Problematic frame:
# C [main+0x1be4] invoke_class(JNIEnv_*, char*, char*)+0x24
#
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
#
# If you would like to submit a bug report, please visit:
# http://bugreport.java.com/bugreport/crash.jsp
#
--------------- T H R E A D ---------------
Current thread is native thread
siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000
Registers:
RAX=0x0000000000000004, RBX=0x0000000000000000, RCX=0x0000000000000000, RDX=0x00007fcc0d20b8c0
RSP=0x00007fcbf2b2ba30, RBP=0x0000000000000005, RSI=0x0000000000000004, RDI=0x00007fcbf2b2b4c0
R8 =0x00007fcbf2b2c700, R9 =0x0000000000000000, R10=0x0000564b4bda12dd, R11=0x0000000000000000
R12=0x00007fcbf2b2bac3, R13=0x00007fcbf2b2bab0, R14=0x0000000000000000, R15=0x00007fffac9e74f0
RIP=0x0000564b4bda0be4, EFLAGS=0x0000000000010202, CSGSFS=0x002b000000000033, ERR=0x0000000000000004
TRAPNO=0x000000000000000e
Top of Stack: (sp=0x00007fcbf2b2ba30)
0x00007fcbf2b2ba30: 00007fcbf2b2bab0 0000000000000005
0x00007fcbf2b2ba40: 00007fcbf2b2bac3 00007fcbf2b2ba70
0x00007fcbf2b2ba50: 0000000000000000 0000564b4bda0dec
0x00007fcbf2b2ba60: 0000000000000000 0000000000000000
0x00007fcbf2b2ba70: 00007fcbc8000b40 00007fcbc8000b50
0x00007fcbf2b2ba80: 00007fcbc8000b50 0024000000000000
0x00007fcbf2b2ba90: 7266206f6c6c6548 6576726573206d6f
0x00007fcbf2b2baa0: 0000000000000072 0000000000000000
0x00007fcbf2b2bab0: 2a207463656c6573 6574206d6f726620
0x00007fcbf2b2bac0: 6564757473007473 000000000000746e
0x00007fcbf2b2bad0: 0000000000000000 0000000000000000
0x00007fcbf2b2bae0: 0000000000000000 0000000000000000
0x00007fcbf2b2baf0: 0000000000000000 0000000000000000
0x00007fcbf2b2bb00: 0000000000000000 0000000000000000
0x00007fcbf2b2bb10: 0000000000000000 0000000000000000
0x00007fcbf2b2bb20: 0000000000000000 0000000000000000
0x00007fcbf2b2bb30: 0000000000000000 0000000000000000
0x00007fcbf2b2bb40: 0000000000000000 0000000000000000
0x00007fcbf2b2bb50: 0000000000000000
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
......@@ -2,11 +2,17 @@
// Created by wanhui on 10/12/19.
//
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <cstring>
#include <iostream>
#include <vector>
#include <jni.h>
#include <pthread.h>
#define PORT 8080
#define NUM_THREADS 6
pthread_mutex_t mutexjvm;
......@@ -18,41 +24,78 @@ struct JVM {
JavaVM *jvm;
};
void invoke_class(JNIEnv* env);
struct ARGS {
struct JVM* jvm;
int socket;
};
void *jvmThreads(void *args, char *plainsql, char *dbname);
void invoke_class(JNIEnv *env, char *plainsql, char *dbname);
int socket_init();
JNIEnv *create_vm(struct JVM *jvm);
void* jvmThreads(void *myJvm)
void* handle_stream(void* arg);
void* handle_stream(void* args)
{
auto* myJvmptr = (struct JVM*) myJvm;
printf("I am get in");
struct ARGS *arg = static_cast<ARGS *>(args);
struct JVM *myJvm = arg->jvm;
int client_fd = arg->socket;
char buf[1024] = {0};
char hello[] = "Hello from server";
read(client_fd, buf, 1024);
char* psql;
char* dbn;
char delims[] = "$";
char *res = nullptr;
std::vector<char*> resvec;
res = strtok(buf, delims);
while (res != nullptr)
{
resvec.push_back(res);
res = strtok(nullptr, delims);
}
psql = resvec[0];
dbn = resvec[1];
jvmThreads(&myJvm, psql, dbn);
send(client_fd, hello, strlen(hello), 0);
printf("Hello message send");
}
void *jvmThreads(void *myJvm, char *plainsql, char *dbname) {
auto *myJvmptr = (struct JVM *) myJvm;
JavaVM *jvmPtr = myJvmptr->jvm;
JNIEnv* env = nullptr;
// Each thread will do following:
// 1. lock the mutex,
// 2. give some info to the user,
// 3. attach to JVM,
// 4. do JVM based stuff,
// 5. detach from JVM,
// 6. release mutex,
// 7. finish thread's job.
// Done
JNIEnv *env = nullptr;
pthread_mutex_lock(&mutexjvm);
printf("I will call JVM\n");
jvmPtr->AttachCurrentThread((void**)&(env), nullptr);
invoke_class(env);
jvmPtr->AttachCurrentThread((void **) &(env), nullptr);
invoke_class(env, plainsql, dbname);
jvmPtr->DetachCurrentThread();
pthread_mutex_unlock(&mutexjvm);
pthread_exit(nullptr);
}
JNIEnv *create_vm (struct JVM *jvm) {
JNIEnv *create_vm(struct JVM *jvm) {
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[3];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-Djava.class.path=.:/home/wanhui/Documents/callJvmThreadpool/qin_test.jar";
options[1].optionString = "-Djava.class.path=.:/home/wanhui/CallJvm/callJvmThreadpool/qin_test1.jar";
options[2].optionString = "-verbose:jni";
vm_args.options = options;
......@@ -61,42 +104,96 @@ JNIEnv *create_vm (struct JVM *jvm) {
vm_args.ignoreUnrecognized = JNI_TRUE;
vm_args.version = JNI_VERSION_1_8;
int status = JNI_CreateJavaVM (&jvm->jvm, (void **) &env, &vm_args);
int status = JNI_CreateJavaVM(&jvm->jvm, (void **) &env, &vm_args);
if (status < 0 || !env) {
printf ("Error: %d\n", status);
printf("Error: %d\n", status);
return nullptr;
}
return env;
}
void invoke_class (JNIEnv * env) {
void invoke_class(JNIEnv *env, char *plainsql, char *dbname) {
jclass Main_class;
jmethodID fun_id;
jmethodID stu_id;
jmethodID hello_id;
jobject obj1;
Main_class = env->FindClass("com/testjvm/Helloworld");
Main_class = env->FindClass ("com/testjvm/Helloworld");
if(Main_class == nullptr)
return;
fun_id = env->GetStaticMethodID (Main_class, "main", "([Ljava/lang/String;)V");
// test generally function student()
hello_id = env->GetMethodID(Main_class, "<init>", "()V");
obj1 = env->NewObject(Main_class, hello_id);
jstring plainsqlstr = env->NewStringUTF(plainsql);
jstring dbnamestr = env->NewStringUTF(dbname);
env->CallStaticIntMethod (Main_class, fun_id);
stu_id = env->GetMethodID(Main_class, "student", "([Ljava/lang/String;)V");
env->CallObjectMethod(obj1, stu_id, dbnamestr);
}
int main () {
int socket_init() {
int server_fd, new_socket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {
perror("socket failed");
exit(EXIT_FAILURE);
}
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt))) {
perror("setsockopt");
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = htonl(INADDR_ANY);
address.sin_port = htons(PORT);
if (bind(server_fd, (struct sockaddr *) &address, sizeof(address)) < 0) {
perror("bind failed");
exit(EXIT_FAILURE);
}
if (listen(server_fd, 10) < 0) {
perror("listen failed");
exit(EXIT_FAILURE);
}
printf("listening...\n");
if ((new_socket = accept(server_fd, (struct sockaddr *) &address, (socklen_t *) &addrlen)) < 0) {
perror("accept failed");
exit(EXIT_FAILURE);
}
return new_socket;
}
int main() {
struct JVM myJvm{};
JNIEnv *myEnv = create_vm (&myJvm);
JNIEnv *myEnv = create_vm(&myJvm);
if (myEnv == nullptr)
return 1;
int new_socket = socket_init();
struct ARGS *args;
args = static_cast<ARGS *>(malloc(sizeof(struct ARGS *)));
args->jvm = &myJvm;
args->socket = new_socket;
pthread_mutex_init(&mutexjvm, nullptr);
for(unsigned long & thread : threads)
{
pthread_create(&thread, nullptr, jvmThreads, (void*)&myJvm);
for (unsigned long &thread : threads) {
printf("before call");
pthread_create(&thread, nullptr, handle_stream, (void *) &args);
pthread_join(thread, nullptr);
}
myJvm.jvm->DestroyJavaVM ();
myJvm.jvm->DestroyJavaVM();
return 0;
}
\ No newline at end of file
此差异已折叠。
......@@ -118,7 +118,7 @@ void tpool_destroy()
free(tpool);
}
int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1)
int tpool_add_work(void*(*routine)(void*), void* arg)
{
tpool_work_t *work, *member;
......@@ -137,7 +137,6 @@ int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1)
work->routine = routine;
work->arg = arg;
work->arg1 = arg1;
work->next = nullptr;
pthread_mutex_lock(&tpool->queue_lock);
......
......@@ -30,7 +30,7 @@ int tpool_create(int max_thr_num);
void tpool_destroy();
int tpool_add_work(void*(*routine)(void*), void* arg, void* arg1);
int tpool_add_work(void*(*routine)(void*), void* arg);
#endif //CALLJVMTHREADPOOL_TPOOL_H
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册