This is the mail archive of the java@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Design Questions for MingW libjava 3.4 Refactoring


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Am Freitag, 27. Juni 2003 02:09 schrieb Mohan Embar:
> Hi Michael + Everyone,
>
> I have a design question related to the
> cleanup / refactoring / enhancements I'm
> making to MingW libjava 3.4, particularly after
> the Posix <-> Win32 networking code fork.
>
> Currently, in platform.h (win32.h or posix.h),
> there are a number of _Jv methods pertaining
> to socket functions. I have eliminated these
> in both win32.h as well as nat*Socket*ImplWin32.h
> because I believe that the rationale was that
> networking code should be split and not
> conditionalized. Things seem to work except
> for _Jv_select(), used by gnu/java/nio/natSelectorImpl.cc:
>
> ---------------------------8<----------------------------
> jint
> gnu::java::nio::SelectorImpl::java_do_select (jintArray read,
> jintArray write, jintArray except, jlong timeout) {
>   jint result;
>   int max_fd = 0;
>   fd_set read_fds;
>   fd_set write_fds;
>   fd_set except_fds;
>   struct timeval real_time_data;
>   struct timeval *time_data = NULL;
>
>   real_time_data.tv_sec = 0;
>   real_time_data.tv_usec = timeout;
>
>   // If not legal timeout value is given, use NULL.
>   // This means an infinite timeout.
>   if (timeout >= 0)
>     {
>       time_data = &real_time_data;
>     }
>
>   // Reset all fd_set structures
>   FD_ZERO (&read_fds);
>   FD_ZERO (&write_fds);
>   FD_ZERO (&except_fds);
>
>   // Fill the fd_set data structures for the _Jv_select() call.
>   helper_put_filedescriptors (read, read_fds, max_fd);
>   helper_put_filedescriptors (write, write_fds, max_fd);
>   helper_put_filedescriptors (except, except_fds, max_fd);
>
>   // Actually do the select
>   result = _Jv_select (max_fd + 1, &read_fds, &write_fds,
> &except_fds, time_data);
>
>   if (result < 0)
>     {
>       char* strerr = strerror (errno);
>       throw new ::java::io::IOException (JvNewStringUTF (strerr));
>     }
>
>   // Set the file descriptors according to the values returned from
> select(). helper_get_filedescriptors (read, read_fds);
>   helper_get_filedescriptors (write, write_fds);
>   helper_get_filedescriptors (except, except_fds);
>
>   return result;
> }
> ---------------------------8<----------------------------
>
> Two questions:
>
> - Does my reasoning behind removing the socket-related _Jv methods
>   in platform.h seem well-founded?
>
> - Assuming the answer to the previous question is "yes", do we
>   fork the above code too, which could easily be reused if
>   we provided _Jv_select()? Wait a minute, if (result < 0),
>   then we use errno / strerror() instead of the Win32 equivalents
>   of WSAGetLastError() / FormatMessage(), so I think I just
> answered my own question.
>
> Your thoughts?

Sorry for the delay. The answer is that this stuff has to be totally 
rewritten. The plan is to put a method for selecting into 
java.io.FileDescriptor that does all the magic. Then all native files 
will be gone in gnu.java.nio for 3.4 (perhaps we have to use some to 
access package-private methods in other packages .... but we dont 
need platform specific native code.


Michael
- -- 
Homepage: http://www.worldforge.org/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+/Fe1WSOgCCdjSDsRAqRuAJ0ZmW+4XdpSmYdMPPpejTNYr5fzwgCfevSS
4DQ81FVGc9ISVS7szSxp7wE=
=E6zc
-----END PGP SIGNATURE-----


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]