[dovecot-cvs] dovecot/src/lib-storage/index/mbox mbox-sync.c, 1.36,
1.37
cras at procontrol.fi
cras at procontrol.fi
Sat Jun 19 21:21:46 EEST 2004
Update of /home/cvs/dovecot/src/lib-storage/index/mbox
In directory talvi:/tmp/cvs-serv8542/lib-storage/index/mbox
Modified Files:
mbox-sync.c
Log Message:
don't crash if we wanted to lock mbox for reading but it also needs rewriting
Index: mbox-sync.c
===================================================================
RCS file: /home/cvs/dovecot/src/lib-storage/index/mbox/mbox-sync.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- mbox-sync.c 19 Jun 2004 17:14:18 -0000 1.36
+++ mbox-sync.c 19 Jun 2004 18:21:44 -0000 1.37
@@ -71,7 +71,13 @@
i_assert(lock_type != F_WRLCK || !ibox->mbox_readonly);
- if (sync_ctx->lock_id != 0) {
+ if (sync_ctx->lock_id == 0 || sync_ctx->input == NULL) {
+ memset(&old_st, 0, sizeof(old_st));
+ if (sync_ctx->lock_id != 0) {
+ (void)mbox_unlock(ibox, sync_ctx->lock_id);
+ sync_ctx->lock_id = 0;
+ }
+ } else {
if (fstat(sync_ctx->fd, &old_st) < 0) {
mbox_set_syscall_error(ibox, "stat()");
return -1;
@@ -82,8 +88,6 @@
(void)mbox_unlock(ibox, sync_ctx->lock_id);
sync_ctx->lock_id = 0;
- } else {
- memset(&old_st, 0, sizeof(old_st));
}
if (mbox_lock(ibox, lock_type, &sync_ctx->lock_id) <= 0)
@@ -1055,6 +1059,7 @@
sync_ctx.ibox = ibox;
sync_ctx.from_line = str_new(default_pool, 256);
sync_ctx.header = str_new(default_pool, 4096);
+ sync_ctx.lock_id = lock_id;
sync_ctx.index_sync_ctx = index_sync_ctx;
sync_ctx.sync_view = sync_view;
@@ -1072,10 +1077,10 @@
(void)mbox_unlock(ibox, lock_id);
lock_id = 0;
}
- if (mbox_sync_lock(&sync_ctx, lock_type) < 0)
- return -1;
- if (mbox_sync_do(&sync_ctx) < 0)
+ if (mbox_sync_lock(&sync_ctx, lock_type) < 0)
+ ret = -1;
+ else if (mbox_sync_do(&sync_ctx) < 0)
ret = -1;
if (ret < 0)
More information about the dovecot-cvs
mailing list