From caecdbb6733069efe7d9e430af00ee6f49c11861 Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Tue, 7 May 2019 16:34:12 +0100 Subject: [PATCH] refactor: remove some locks on jobthread --- src/dc_configure.rs | 4 ---- src/dc_context.rs | 4 ---- src/dc_jobthread.rs | 29 ++++++++++++----------------- 3 files changed, 12 insertions(+), 25 deletions(-) diff --git a/src/dc_configure.rs b/src/dc_configure.rs index d0811637d..61802e888 100644 --- a/src/dc_configure.rs +++ b/src/dc_configure.rs @@ -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( diff --git a/src/dc_context.rs b/src/dc_context.rs index aa2d1fad5..43d03c0e8 100644 --- a/src/dc_context.rs +++ b/src/dc_context.rs @@ -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(); diff --git a/src/dc_jobthread.rs b/src/dc_jobthread.rs index d223c7a5e..cdfe7b765 100644 --- a/src/dc_jobthread.rs +++ b/src/dc_jobthread.rs @@ -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>, + pub imap: dc_imap_t, pub state: Arc<(Mutex, 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,