Date: Tue, 4 Dec 2001 15:05:11 -0800 From: Joe Kelsey <joe@zircon.seattle.wa.us> To: freebsd-java@freebsd.org Subject: JavaVM5 *major* foobar Message-ID: <15373.22183.229468.123327@zircon.zircon.seattle.wa.us>
next in thread | raw e-mail | index | archive | help
Something has been bothering me for quite some time. Every once in a while, during my testing of the plugin, I start getting unexplained errors during the thread attach process. I could never figure out why, and sooner or later, the problem disappeared on its own. Well, I finally got tired of the problem and started exploring the root cause. It seems that JavaVM5 creates a UNIX-domain socket for the plugin to connect to. It names this socket /tmp/jpsock.131.pid, where pid is the Mozilla pid. It then passes this to the child after performing a htons() on it. The child takes the 4-byte value and performs another htons() and uses it to try to connect to the socket. I'm sure everyone can see the excruciating horribleness of this thing now. This apparantly works on machines with traditional, "short" pids, but on FreeBSD it breaks horribly whenever the pids rise above 65384. Anyway, the fix is obvious, and needs to be implemented in both JavaVM5.cpp and server.c. Since Greg is collecting a new patch, this is important enough to include. I will try to see if I find any other similar mistakes that could be causing my current woes. Here are the diffs for the files, just for the changes to fix the pid problem. /Joe --- JavaVM5.cpp~ Thu Nov 22 10:18:59 2001 +++ JavaVM5.cpp Tue Dec 4 14:53:00 2001 @@ -510,7 +510,7 @@ bzero(net_address.local.path,sizeof(net_address.local.path)); sprintf(net_address.local.path,"%s.%s.%d",JAVA_PLUGIN_SOCKFILE,PLUGIN_NODOTVERSION,spid); unlink(net_address.local.path); - try_port = htons(spid); + try_port = htonl(spid); if(PR_Bind(server_socket, &net_address) != PR_SUCCESS) { TRACE_INT("Binding of server socket failed", try_port); } --- server.c~ Thu Nov 22 10:18:59 2001 +++ server.c Tue Dec 4 14:52:58 2001 @@ -2703,7 +2703,7 @@ inet_addr(inet_ntoa(hostPtr->h_addr_list[0])); */ client.sin_addr.s_addr = *(int *)(hostPtr->h_addr_list[0]); - client.sin_port = htons(port); + client.sin_port = ntohs(port); native_trace("Using port: %d\n", port); @@ -2713,7 +2713,7 @@ #else bzero(&client,sizeof(client)); client.sun_family = AF_UNIX; - sprintf(client.sun_path,"%s.%s.%d",JAVA_PLUGIN_SOCKFILE,PLUGIN_NODOTVERSION,htons(port)); + sprintf(client.sun_path,"%s.%s.%d",JAVA_PLUGIN_SOCKFILE,PLUGIN_NODOTVERSION,ntohl(port)); native_trace("Using file: %s\n", client.sun_path); To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-java" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15373.22183.229468.123327>