mirror of
https://github.com/samba-team/samba.git
synced 2025-11-20 08:23:50 +03:00
r3539: much nicer async open delay code.
The previous code didn't handle the case where the file got renamed or deleted while waiting for the sharing violation delay. To handle this we need to make the 2nd open a full open call, including the name resolve call etc. Luckily this simplifies the logic. I also expanded the RAW-MUX test to include the case where we do open/open/open/close/close, with the 3rd open async, and that open gets retried after both the first close and the 2nd close, with the first retry failing and the 2nd retry working. The tests the "async reply after a async reply" logic in pvfs_open().
This commit is contained in:
committed by
Gerald (Jerry) Carter
parent
6fab01df00
commit
eded2ad9c9
@@ -331,12 +331,14 @@ NTSTATUS odb_close_file(struct odb_lock *lck, uint16_t fnum)
|
||||
elist = (struct odb_entry *)dbuf.dptr;
|
||||
count = dbuf.dsize / sizeof(struct odb_entry);
|
||||
|
||||
/* send any pending notifications */
|
||||
/* send any pending notifications, removing them once sent */
|
||||
for (i=0;i<count;i++) {
|
||||
if (elist[i].pending) {
|
||||
messaging_send_ptr(odb->messaging_ctx, elist[i].server,
|
||||
MSG_PVFS_RETRY_OPEN, elist[i].notify_ptr);
|
||||
|
||||
memmove(&elist[i], &elist[i+1], sizeof(struct odb_entry)*(count-(i+1)));
|
||||
i--;
|
||||
count--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user