summaryrefslogtreecommitdiff
path: root/ext/session/mod_files.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/session/mod_files.c')
-rw-r--r--ext/session/mod_files.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index 9ca57b7eac..e3ef303611 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -141,20 +141,17 @@ static void ps_files_open(ps_files *data, const char *key TSRMLS_DC)
data->lastkey = estrdup(key);
-#ifdef O_EXCL
- data->fd = VCWD_OPEN(buf, O_RDWR | O_BINARY);
-
- if (data->fd == -1 && errno == ENOENT)
- data->fd = VCWD_OPEN_MODE(buf, O_EXCL | O_RDWR | O_CREAT | O_BINARY, 0600);
-#else
data->fd = VCWD_OPEN_MODE(buf, O_CREAT | O_RDWR | O_BINARY, 0600);
-#endif
- if (data->fd != -1)
+
+ if (data->fd != -1) {
flock(data->fd, LOCK_EX);
-
- if (data->fd == -1)
+ if (fcntl(data->fd, F_SETFD, 1)) {
+ php_error(E_WARNING, "fcntl(%d, F_SETFD, 1) failed: %s (%d)", data->fd, strerror(errno), errno);
+ }
+ } else {
php_error(E_WARNING, "open(%s, O_RDWR) failed: %s (%d)", buf,
strerror(errno), errno);
+ }
}
}