php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #25070 Apache is stopped on intesive session work
Submitted: 2003-08-13 04:16 UTC Modified: 2003-09-24 19:37 UTC
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: akss at plesk dot ru Assigned:
Status: Closed Package: Session related
PHP Version: 4.3.3 OS: Windows
Private report: No CVE-ID: None
 [2003-08-13 04:16 UTC] akss at plesk dot ru
Description:
------------
php-4.3.2

Windows hangs at frequent references to the pages using the sessions mechanism. This is because too many locks are created for a session file "sess_xxx".


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2003-08-20 03:30 UTC] akss at plesk dot ru
Patch for fix ext/session/mod_files.c on windows:

--- mod_files.c.orig    Tue May 20 20:01:54 2003
+++ mod_files.c Fri Aug 15 05:12:40 2003
@@ -124,6 +124,7 @@
 static void ps_files_close(ps_files *data)
 {
        if (data->fd != -1) {
+               flock(data->fd, LOCK_UN);
                close(data->fd);
                data->fd = -1;
        }
@@ -275,8 +276,10 @@
        if (data->fd < 0)
                return FAILURE;

-       if (fstat(data->fd, &sbuf))
+  if (fstat(data->fd, &sbuf)) {
+    flock(data->fd, LOCK_UN);
                return FAILURE;
+  }

        data->st_size = *vallen = sbuf.st_size;
        *val = emalloc(sbuf.st_size);
@@ -287,6 +290,7 @@
        lseek(data->fd, 0, SEEK_SET);
        n = read(data->fd, *val, sbuf.st_size);
 #endif
+  flock(data->fd, LOCK_UN);

        if (n != sbuf.st_size) {
                if (n == -1)
@@ -325,6 +329,7 @@
        lseek(data->fd, 0, SEEK_SET);
        n = write(data->fd, val, vallen);
 #endif
+  flock(data->fd, LOCK_UN);

        if (n != vallen) {
                if (n == -1)

Other case apache hangs up.
 [2003-08-25 22:02 UTC] sniper@php.net
I've been trying to reproduce this without luck..can you please give a simple test case with which you have reproduced this reliably?

 [2003-08-25 23:18 UTC] akss at plesk dot ru
Unfortunatelly i can't give a code. It closed development. And i have not time now for produce purified test example.

I try to describe

1 Create page with form with 2 input fields login & pass and submit button (login page).

2 Create auto prepend file with session check. If no session go to login page.

3 Change session parameters in auto prepend file
ini_set('session.gc_probability', 1-5);
session_save_path('deep 4-5');
ini_set('session.gc_maxlifetime', near 20000);

4 On login submit create session. Put to her both parameter login and pass. If session created (parameters setted) redirect to other pages with 2-3 frames which check session settings too.

5 Made many quickly switchings over this frames. 1st, 2nd, 3d, again 1st.

6 Apache without patch hangs up.
 [2003-09-24 19:37 UTC] iliaa@php.net
This bug has been fixed in CVS.

In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
 
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.

In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
 
Thank you for the report, and for helping us make PHP better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Dec 08 22:01:27 2024 UTC