Date: 01/27/99
- Next message: rasmus: "[PHP-DEV] CVS update: php3/functions"
- Previous message: mosttoys <email protected>: "[PHP-DEV] Bug #1098:"
- Next in thread: Thies C. Arntzen: "Re: [PHP-DEV] CVS update: php3"
- Reply: Thies C. Arntzen: "Re: [PHP-DEV] CVS update: php3"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Wednesday January 27, 1999 @ 14:18
Author: rasmus
Update of /repository/php3
In directory asf:/u/temp/cvs-serv8695
Modified Files:
internal_functions.c main.c php.h
Log Message:
Heads up! The following completely cleans up the aborted connection
mess that never worked reliably. Thanks to Thies C. Arntzen for getting
me started on this. There was a bit more to it than his initial work.
As discussed with some Apache guys, we are now checking the return status
of each write and set a global connection_aborted variable if the number of
bytes written do not match the number of bytes sent. A user-level
connection_aborted() function has been added. This returns true if the
connection was aborted, obviously. This is useful in a user-level
registered shutdown function if something needs to be cleaned up
differently if the remote user hit his stop button.
Index: php3/internal_functions.c
diff -c php3/internal_functions.c:1.341 php3/internal_functions.c:1.342
*** php3/internal_functions.c:1.341 Tue Jan 26 17:32:35 1999
--- php3/internal_functions.c Wed Jan 27 14:18:09 1999
***************
*** 29,35 ****
*/
! /* $Id: internal_functions.c,v 1.341 1999/01/26 22:32:35 timothy Exp $ */
#ifdef THREAD_SAFE
#include "tls.h"
--- 29,35 ----
*/
! /* $Id: internal_functions.c,v 1.342 1999/01/27 19:18:09 rasmus Exp $ */
#ifdef THREAD_SAFE
#include "tls.h"
***************
*** 165,173 ****
{"PDF", pdf_module_ptr},
{"FDF", fdf_module_ptr},
{"System V semaphores", sysvsem_module_ptr},
! {"System V shared memory", sysvshm_module_ptr},
{"DAV", phpdav_module_ptr},
! {"MCK Crypt", mckcrypt_module_ptr},
{NULL, NULL}
};
--- 165,173 ----
{"PDF", pdf_module_ptr},
{"FDF", fdf_module_ptr},
{"System V semaphores", sysvsem_module_ptr},
! {"System V shared memory", sysvshm_module_ptr},
{"DAV", phpdav_module_ptr},
! {"MCK Crypt", mckcrypt_module_ptr},
{NULL, NULL}
};
Index: php3/main.c
diff -c php3/main.c:1.491 php3/main.c:1.492
*** php3/main.c:1.491 Fri Jan 15 12:19:58 1999
--- php3/main.c Wed Jan 27 14:18:10 1999
***************
*** 29,35 ****
+----------------------------------------------------------------------+
*/
! /* $Id: main.c,v 1.491 1999/01/15 17:19:58 zeev Exp $ */
/* #define CRASH_DETECTION */
--- 29,35 ----
+----------------------------------------------------------------------+
*/
! /* $Id: main.c,v 1.492 1999/01/27 19:18:10 rasmus Exp $ */
/* #define CRASH_DETECTION */
***************
*** 99,104 ****
--- 99,106 ----
void *gLock; /*mutex variable */
#ifndef THREAD_SAFE
+ int connection_aborted;
+ int abort_shutdown_pending;
int error_reporting, tmp_error_reporting;
int initialized; /* keep track of which resources were successfully initialized */
static int module_initialized = 0;
***************
*** 170,181 ****
#if APACHE
void php3_apache_puts(const char *s)
{
TLS_VARS;
if (GLOBAL(php3_rqst)) {
! rputs(s, GLOBAL(php3_rqst));
} else {
fputs(s, stdout);
}
--- 172,199 ----
#if APACHE
+ int php3_apache_write(const void *a, int n)
+ {
+ int ret;
+ TLS_VARS;
+
+ ret = rwrite(a,n,GLOBAL(php3_rqst));
+
+ if (ret != n) {
+ GLOBAL(connection_aborted) = 1;
+ }
+
+ return ret;
+ }
+
void php3_apache_puts(const char *s)
{
TLS_VARS;
if (GLOBAL(php3_rqst)) {
! if (rputs(s, GLOBAL(php3_rqst)) == -1) {
! GLOBAL(connection_aborted) = 1;
! }
} else {
fputs(s, stdout);
}
***************
*** 186,192 ****
TLS_VARS;
if (GLOBAL(php3_rqst)) {
! rputc(c, GLOBAL(php3_rqst));
} else {
fputc(c, stdout);
}
--- 204,212 ----
TLS_VARS;
if (GLOBAL(php3_rqst)) {
! if (rputc(c, GLOBAL(php3_rqst)) != c) {
! GLOBAL(connection_aborted) = 1;
! }
} else {
fputc(c, stdout);
}
***************
*** 422,429 ****
return 0;
}
#if APACHE
! if (php3_rqst->connection->aborted) {
GLOBAL(shutdown_requested) = ABNORMAL_SHUTDOWN;
return 0;
}
#endif
--- 442,456 ----
return 0;
}
#if APACHE
! if ((php3_rqst->connection->aborted || GLOBAL(connection_aborted)) && !GLOBAL(abort_shutdown_pending)) {
GLOBAL(shutdown_requested) = ABNORMAL_SHUTDOWN;
+ /*
+ abort_shutdown_pending is used to tell phplex() that even though we know that the
+ remote client is no longer listening to us, we still want it to continue in case
+ we come back here as part of a registered shutdown function. Without this flag
+ a user-registered shutdown function would never run to completion.
+ */
+ GLOBAL(abort_shutdown_pending) = 1;
return 0;
}
#endif
***************
*** 457,463 ****
TLS_VARS;
if (!GLOBAL(shutdown_requested)) {
! php3_error(E_ERROR, "Maximum execution time of %d seconds exceeded", php3_ini.max_execution_time);
/* Now, schedule another alarm. If we're stuck in a code portion that will not go through
* phplex() or if the parser is broken, end the process ungracefully
*/
--- 484,490 ----
TLS_VARS;
if (!GLOBAL(shutdown_requested)) {
! php3_error(E_ERROR, "Maximum execution time exceeded");
/* Now, schedule another alarm. If we're stuck in a code portion that will not go through
* phplex() or if the parser is broken, end the process ungracefully
*/
***************
*** 532,537 ****
--- 559,570 ----
be. If we use a bound thread and proper masking it
should work fine. Is this FIXME a WIN32 problem? Is
there no way to do per-thread timers on WIN32?
+
+ Something to keep in mind here is that the SIGPROF itimer
+ we are currently using is not a real-time timer. It is
+ only active when the process is in user or kernel space.
+ ie. a sleep(10); call in a script will not count towards
+ the timeout limit. -RL
*/
GLOBAL(max_execution_time) = new_timeout->value.lval;
php3_unset_timeout(_INLINE_TLS_VOID);
***************
*** 592,597 ****
--- 625,632 ----
GLOBAL(shutdown_requested) = 0;
GLOBAL(header_is_being_sent) = 0;
GLOBAL(php3_track_vars) = php3_ini.track_vars;
+ GLOBAL(connection_aborted) = 0;
+ GLOBAL(abort_shutdown_pending) = 0;
}
if (php3_init_request_info((void *) &php3_ini)) {
***************
*** 702,708 ****
log_error(log_message, php3_rqst->server);
}
#endif
-
php3_call_shutdown_functions();
if (GLOBAL(initialized) & INIT_LIST) {
--- 737,742 ----
Index: php3/php.h
diff -c php3/php.h:1.42 php3/php.h:1.43
*** php3/php.h:1.42 Fri Jan 1 12:58:51 1999
--- php3/php.h Wed Jan 27 14:18:11 1999
***************
*** 28,34 ****
+----------------------------------------------------------------------+
*/
! /* $Id: php.h,v 1.42 1999/01/01 17:58:51 zeev Exp $ */
#ifndef _PHP_H
#define _PHP_H
--- 28,34 ----
+----------------------------------------------------------------------+
*/
! /* $Id: php.h,v 1.43 1999/01/27 19:18:11 rasmus Exp $ */
#ifndef _PHP_H
#define _PHP_H
***************
*** 248,257 ****
#if APACHE
extern PHPAPI void php3_apache_puts(const char *s);
extern PHPAPI void php3_apache_putc(char c);
# if !defined(COMPILE_DL)
# define PUTS(s) php3_apache_puts(s)
# define PUTC(c) php3_apache_putc(c)
! # define PHPWRITE(a,n) rwrite((a),(n),GLOBAL(php3_rqst))
# endif
#endif
--- 248,259 ----
#if APACHE
extern PHPAPI void php3_apache_puts(const char *s);
extern PHPAPI void php3_apache_putc(char c);
+ extern PHPAPI int php3_apache_write(const void *a, int n);
# if !defined(COMPILE_DL)
# define PUTS(s) php3_apache_puts(s)
# define PUTC(c) php3_apache_putc(c)
! # define PHPWRITE(a,n) php3_apache_write(a,n)
! /* thies <email protected> 990119 # define PHPWRITE(a,n) rwrite((a),(n),GLOBAL(php3_rqst)) */
# endif
#endif
***************
*** 447,452 ****
--- 449,456 ----
extern HashTable include_names;
extern HashTable *active_symbol_table;
extern int phplineno, current_lineno;
+ extern int connection_aborted;
+ extern int abort_shutdown_pending;
extern int error_reporting,tmp_error_reporting;
extern pval *data,globals;
extern FunctionState function_state;
-- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe <email protected> For help: php-dev-help <email protected>
- Next message: rasmus: "[PHP-DEV] CVS update: php3/functions"
- Previous message: mosttoys <email protected>: "[PHP-DEV] Bug #1098:"
- Next in thread: Thies C. Arntzen: "Re: [PHP-DEV] CVS update: php3"
- Reply: Thies C. Arntzen: "Re: [PHP-DEV] CVS update: php3"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

