Date: Wed, 05 Dec 2001 10:17:37 +0100 From: Cedric Berger <cedric@wireless-networks.com> To: Joe Kelsey <joe@zircon.seattle.wa.us> Cc: freebsd-java@freebsd.org Subject: Re: JavaVM5 *major* foobar Message-ID: <3C0DE631.3000000@wireless-networks.com> References: <15373.22183.229468.123327@zircon.zircon.seattle.wa.us>
next in thread | previous in thread | raw e-mail | index | archive | help
Just out of curiosity:
are theses kind of obvious patches sent to Sun, so JDK 1.4, 1.5, 1.6
won't need
to be patched again?
Cedric
Joe Kelsey wrote:
>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
>
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?3C0DE631.3000000>
