You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Jim Jagielski <ji...@jaguNET.com> on 1995/08/08 20:15:55 UTC
Fix found for A/UX and POST error
Working together, Eric and I have discovered the problem with A/UX and
both POST as well as the tricky nastiness required for A/UX in http_main.c
(i.e. the rewind(), etc...).
For some reason, unknown at this time, A/UX is only happy if the 2 fdopen()
calls for conn_in/conn_out refer to different file-descriptors. The obvious
solution is to use dup() to duplicate 'csd' and use that. The below puts
an A/UX wrapper around code that does that, but MAYBE it may be "better"
to have Apache use this "technique" for every system.
Comments?
PS: The below is based on 0.8.8 with my FLOCK patches... your fuzziness will
vary.
---------->8 cut here--------
***************
*** 645,650 ****
--- 667,673 ----
*/
static int csd;
+ static int dupped_csd;
static int requests_this_child;
static int child_num;
***************
*** 665,670 ****
--- 688,694 ----
#endif
csd = -1;
+ dupped_csd = -1;
child_num = child_num_arg;
requests_this_child = 0;
update_child_status (child_num, SERVER_READY);
***************
*** 720,733 ****
accept_mutex_off(); /* unlock after "accept" */
note_cleanups_for_fd (ptrans, csd);
! update_child_status (child_num, SERVER_BUSY);
#ifdef AUX
! conn_in = conn_out = fdopen(csd, "r+");
! #else
! conn_in = fdopen (csd, "r");
! conn_out = fdopen (csd, "w");
#endif
!
current_conn = new_connection (ptrans, server_conf, conn_in, conn_out);
if (current_conn->server->do_rfc931)
--- 744,761 ----
accept_mutex_off(); /* unlock after "accept" */
note_cleanups_for_fd (ptrans, csd);
! dupped_csd = csd;
#ifdef AUX
! if ((dupped_csd = dup(csd)) < 0) {
! log_error("couldn't duplicate csd", server_conf);
! dupped_csd = csd; /* Oh well... */
! } else
! note_cleanups_for_fd (ptrans, dupped_csd);
#endif
! update_child_status (child_num, SERVER_BUSY);
! conn_in = fdopen (csd, "r");
! conn_out = fdopen (dupped_csd, "w");
!
current_conn = new_connection (ptrans, server_conf, conn_in, conn_out);
if (current_conn->server->do_rfc931)
***************
*** 735,743 ****
rfc931((struct sockaddr_in *)&sa_client, &sa_server);
r = read_request (current_conn);
- #ifdef AUX
- rewind(r->connection->client);
- #endif
if (r) process_request (r); /* else premature EOF --- ignore */
if (bytes_in_pool (ptrans) > 80000) {
--- 763,768 ----
--
Jim Jagielski << jim@jaguNET.com >> | "Stwike him Centuwian, vewy woughwy!"
** jaguNET Access Services ** | - Pontius Piwate
++ Email: info@jaguNET.com +++ Voice: 410-931-3157 ++
++ http://www.jaguNET.com/ +++ Data: 931-7060 ("guest") ++