diff options
author | Jeremy Allison <jra@samba.org> | 2003-08-01 06:10:30 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-08-01 06:10:30 +0000 |
commit | ef915c8eaf1d8335aa331d3b2376c40e3a63de22 (patch) | |
tree | 056d7a9b7f31b613fcd3c42e034f7b0758d8e0fa | |
parent | 7e39e87ce0a83a08a8bf2b27f7264bc3c12a9aee (diff) | |
download | samba-ef915c8eaf1d8335aa331d3b2376c40e3a63de22.tar.gz |
Final fix for the bug tridge found. Only push locks onto a blocking lock
queue if the posix lock failed with EACCES or EAGAIN (this means another
lock conflicts). Else return an error and don't queue the request.
Jeremy.
(This used to be commit 43fbc18fdc184bf29c15186c16bc99fb208de963)
-rw-r--r-- | source3/libsmb/errormap.c | 1 | ||||
-rw-r--r-- | source3/locking/locking.c | 6 |
2 files changed, 6 insertions, 1 deletions
diff --git a/source3/libsmb/errormap.c b/source3/libsmb/errormap.c index 8ee5ee3d31e..3d99e3d5e52 100644 --- a/source3/libsmb/errormap.c +++ b/source3/libsmb/errormap.c @@ -1498,6 +1498,7 @@ const struct unix_error_map unix_dos_nt_errmap[] = { { ENFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES }, { EMFILE, ERRDOS, ERRnofids, NT_STATUS_TOO_MANY_OPENED_FILES }, { ENOSPC, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL }, + { ENOMEM, ERRDOS, ERRnomem, NT_STATUS_NO_MEMORY }, #ifdef EDQUOT { EDQUOT, ERRHRD, ERRdiskfull, NT_STATUS_DISK_FULL }, #endif diff --git a/source3/locking/locking.c b/source3/locking/locking.c index f4de83c3464..4475f1446f9 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -125,7 +125,11 @@ static NTSTATUS do_lock(files_struct *fsp,connection_struct *conn, uint16 lock_p */ if (!set_posix_lock(fsp, offset, count, lock_type)) { - status = NT_STATUS_LOCK_NOT_GRANTED; + if (errno == EACCES || errno == EAGAIN) + status = NT_STATUS_FILE_LOCK_CONFLICT; + else + status = map_nt_error_from_unix(errno); + /* * We failed to map - we must now remove the brl * lock entry. |