refactor: remove some locks on jobthread

This commit is contained in:
dignifiedquire
2019-05-07 16:34:12 +01:00
parent eac0c201bd
commit caecdbb673
3 changed files with 12 additions and 25 deletions

View File

@@ -140,16 +140,12 @@ pub unsafe fn dc_job_do_DC_JOB_CONFIGURE_IMAP(context: &dc_context_t, _job: *mut
.lock()
.unwrap()
.imap
.lock()
.unwrap()
.disconnect(context);
context
.mvbox_thread
.lock()
.unwrap()
.imap
.lock()
.unwrap()
.disconnect(context);
context.smtp.clone().lock().unwrap().disconnect();
dc_log_info(

View File

@@ -295,16 +295,12 @@ pub unsafe fn dc_close(context: &dc_context_t) {
.lock()
.unwrap()
.imap
.lock()
.unwrap()
.disconnect(context);
context
.mvbox_thread
.lock()
.unwrap()
.imap
.lock()
.unwrap()
.disconnect(context);
context.smtp.clone().lock().unwrap().disconnect();

View File

@@ -13,7 +13,7 @@ use crate::x::*;
pub struct dc_jobthread_t {
pub name: *mut libc::c_char,
pub folder_config_name: *mut libc::c_char,
pub imap: Arc<Mutex<dc_imap_t>>,
pub imap: dc_imap_t,
pub state: Arc<(Mutex<JobState>, Condvar)>,
}
@@ -25,7 +25,7 @@ pub unsafe fn dc_jobthread_init(
dc_jobthread_t {
name: dc_strdup(name),
folder_config_name: dc_strdup(folder_config_name),
imap: Arc::new(Mutex::new(imap)),
imap,
state: Arc::new((Mutex::new(Default::default()), Condvar::new())),
}
}
@@ -102,7 +102,7 @@ pub unsafe extern "C" fn dc_jobthread_interrupt_idle(
);
println!("jobthread interrupt, waiting for lock");
jobthread.imap.lock().unwrap().interrupt_idle();
jobthread.imap.interrupt_idle();
let &(ref lock, ref cvar) = &*jobthread.state.clone();
let mut state = lock.lock().unwrap();
@@ -138,16 +138,16 @@ pub unsafe fn dc_jobthread_fetch(
b"%s-fetch started...\x00" as *const u8 as *const libc::c_char,
jobthread.name,
);
jobthread.imap.lock().unwrap().fetch(context);
jobthread.imap.fetch(context);
if jobthread.imap.lock().unwrap().should_reconnect() {
if jobthread.imap.should_reconnect() {
dc_log_info(
context,
0i32,
b"%s-fetch aborted, starting over...\x00" as *const u8 as *const libc::c_char,
jobthread.name,
);
jobthread.imap.lock().unwrap().fetch(context);
jobthread.imap.fetch(context);
}
dc_log_info(
context,
@@ -171,11 +171,10 @@ unsafe fn connect_to_imap(context: &dc_context_t, jobthread: &mut dc_jobthread_t
let mut ret_connected: libc::c_int;
let mut mvbox_name: *mut libc::c_char = 0 as *mut libc::c_char;
if jobthread.imap.lock().unwrap().is_connected() {
if jobthread.imap.is_connected() {
ret_connected = 1
} else {
ret_connected =
dc_connect_to_configured_imap(context, &mut jobthread.imap.clone().lock().unwrap());
ret_connected = dc_connect_to_configured_imap(context, &jobthread.imap);
if !(0 == ret_connected) {
if dc_sqlite3_get_config_int(
context,
@@ -184,11 +183,7 @@ unsafe fn connect_to_imap(context: &dc_context_t, jobthread: &mut dc_jobthread_t
0,
) < 3
{
jobthread
.imap
.lock()
.unwrap()
.configure_folders(context, 0x1);
jobthread.imap.configure_folders(context, 0x1);
}
mvbox_name = dc_sqlite3_get_config(
context,
@@ -197,10 +192,10 @@ unsafe fn connect_to_imap(context: &dc_context_t, jobthread: &mut dc_jobthread_t
0 as *const libc::c_char,
);
if mvbox_name.is_null() {
jobthread.imap.lock().unwrap().disconnect(context);
jobthread.imap.disconnect(context);
ret_connected = 0;
} else {
jobthread.imap.lock().unwrap().set_watch_folder(mvbox_name);
jobthread.imap.set_watch_folder(mvbox_name);
}
}
}
@@ -258,7 +253,7 @@ pub unsafe fn dc_jobthread_idle(
b"%s-IDLE started...\x00" as *const u8 as *const libc::c_char,
jobthread.name,
);
jobthread.imap.lock().unwrap().idle(context);
jobthread.imap.idle(context);
dc_log_info(
context,
0i32,