Skip to content

Commit 48cc4a7

Browse files
committed
Bugfix php#2397: dba_open locking error with db3
1 parent a17c5a5 commit 48cc4a7

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

ext/dba/dba.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -636,15 +636,20 @@ static void php_dba_open(INTERNAL_FUNCTION_PARAMETERS, int persistent)
636636
lock_mode = (lock_flag & DBA_LOCK_WRITER) ? LOCK_EX : 0;
637637
file_mode = "r+b";
638638
break;
639-
case 'n':
640-
modenr = DBA_TRUNC;
641-
lock_mode = (lock_flag & DBA_LOCK_TRUNC) ? LOCK_EX : 0;
642-
file_mode = "w+b";
643-
break;
644639
case 'c':
645640
modenr = DBA_CREAT;
646641
lock_mode = (lock_flag & DBA_LOCK_CREAT) ? LOCK_EX : 0;
647642
file_mode = "a+b";
643+
if (!lock_mode || !lock_dbf) {
644+
break;
645+
}
646+
/* When we lock the db file it will be created before the handler
647+
* even tries to open it, hence we must change to truncate mode.
648+
*/
649+
case 'n':
650+
modenr = DBA_TRUNC;
651+
lock_mode = (lock_flag & DBA_LOCK_TRUNC) ? LOCK_EX : 0;
652+
file_mode = "w+b";
648653
break;
649654
default:
650655
modenr = 0;

0 commit comments

Comments
 (0)