DLLIST2_REMOVE_FULL(&mbox->open_backend_boxes_head,
&mbox->open_backend_boxes_tail, bbox,
prev_open, next_open);
+
+ /* stop receiving notifications */
+ if (bbox->notify_changes_started)
+ mailbox_notify_changes_stop(bbox->box);
+ bbox->notify_changes_started = FALSE;
+
mailbox_close(bbox->box);
}
if (box->notify_callback == NULL) {
array_foreach_modifiable(&mbox->backend_boxes, bboxp) {
- mailbox_notify_changes_stop((*bboxp)->box);
+ if ((*bboxp)->notify_changes_started) {
+ mailbox_notify_changes_stop((*bboxp)->box);
+ (*bboxp)->notify_changes_started = FALSE;
+ }
if ((*bboxp)->notify != NULL)
mailbox_list_notify_deinit(&(*bboxp)->notify);
}
}
mailbox_notify_changes((*bboxp)->box,
virtual_notify_callback, box);
+ (*bboxp)->notify_changes_started = TRUE;
}
}
unsigned int uids_nonsorted:1;
unsigned int search_args_initialized:1;
unsigned int deleted:1;
+ unsigned int notify_changes_started:1; /* if the box was opened for notify_changes */
};
ARRAY_DEFINE_TYPE(virtual_backend_box, struct virtual_backend_box *);