ffi: remove dc_is_io_running()

It is misleading and should never be checked.

dc_stop_io() also stops pending ephemeral message deletion tasks, so it
should be called in any case before releasing context.
This commit is contained in:
Alexander Krotov
2021-01-13 02:33:48 +03:00
committed by link2xt
parent ebccdbbcb9
commit 8412affe37
7 changed files with 5 additions and 47 deletions

View File

@@ -532,7 +532,6 @@ int dc_is_configured (const dc_context_t* context);
/**
* Start job and IMAP/SMTP tasks.
* If IO is already running, nothing happens.
* To check the current IO state, use dc_is_io_running().
*
* If the context was created by the dc_accounts_t account manager,
* use dc_accounts_start_io() instead of this function.
@@ -542,20 +541,10 @@ int dc_is_configured (const dc_context_t* context);
*/
void dc_start_io (dc_context_t* context);
/**
* Check if IO (SMTP/IMAP/Jobs) has been started.
*
* @memberof dc_context_t
* @param context The context object.
* @return 1=IO is running;
* 0=IO is not running.
*/
int dc_is_io_running(const dc_context_t* context);
/**
* Stop job, IMAP, SMTP and other tasks and return when they
* are finished.
* To check the current IO state, use dc_is_io_running().
*
* Even if IO is not running, there may be pending tasks,
* so this function should always be called before releasing
* context to ensure clean termination of event loop.

View File

@@ -296,16 +296,6 @@ pub unsafe extern "C" fn dc_start_io(context: *mut dc_context_t) {
block_on(ctx.start_io())
}
#[no_mangle]
pub unsafe extern "C" fn dc_is_io_running(context: *mut dc_context_t) -> libc::c_int {
if context.is_null() {
return 0;
}
let ctx = &*context;
block_on(ctx.is_io_running()) as libc::c_int
}
#[no_mangle]
pub unsafe extern "C" fn dc_get_id(context: *mut dc_context_t) -> libc::c_int {
if context.is_null() {

View File

@@ -459,8 +459,6 @@ class Account(object):
If sending out was unsuccessful, a RuntimeError is raised.
"""
self.check_is_configured()
if not self.is_started():
raise RuntimeError("IO not running, can not send out")
res = lib.dc_initiate_key_transfer(self._dc_context)
if res == ffi.NULL:
raise RuntimeError("could not send out autocrypt setup message")
@@ -592,9 +590,6 @@ class Account(object):
lib.dc_configure(self._dc_context)
return configtracker
def is_started(self):
return self._event_thread.is_alive() and bool(lib.dc_is_io_running(self._dc_context))
def wait_shutdown(self):
""" wait until shutdown of this account has completed. """
self._shutdown_event.wait()
@@ -604,11 +599,8 @@ class Account(object):
self.log("stop_ongoing")
self.stop_ongoing()
if bool(lib.dc_is_io_running(self._dc_context)):
self.log("dc_stop_io (stop core IO scheduler)")
lib.dc_stop_io(self._dc_context)
else:
self.log("stop_scheduler called on non-running context")
self.log("dc_stop_io (stop core IO scheduler)")
lib.dc_stop_io(self._dc_context)
def shutdown(self):
""" shutdown and destroy account (stop callback thread, close and remove

View File

@@ -361,7 +361,7 @@ def acfactory(pytestconfig, tmpdir, request, session_liveconfig, data):
for acc in self._accounts:
self.wait_configure(acc)
acc.set_config("bcc_self", "0")
if acc.is_configured() and not acc.is_started():
if acc.is_configured() and acc not in started_accounts:
acc.start_io()
started_accounts.append(acc)
print("{}: {} account was successfully setup".format(

View File

@@ -488,10 +488,6 @@ class TestOfflineChat:
assert messages[0].text == "msg1"
assert os.path.exists(messages[1].filename)
def test_ac_setup_message_fails(self, ac1):
with pytest.raises(RuntimeError):
ac1.initiate_key_transfer()
def test_set_get_draft(self, chat1):
msg = Message.new_empty(chat1.account, "text")
msg1 = chat1.prepare_message(msg)

View File

@@ -1620,10 +1620,6 @@ pub async fn send_msg_sync(
chat_id: ChatId,
msg: &mut Message,
) -> Result<MsgId, Error> {
if context.is_io_running().await {
return send_msg(context, chat_id, msg).await;
}
if let Some(mut job) = prepare_send_msg(context, chat_id, msg).await? {
let mut smtp = crate::smtp::Smtp::new();

View File

@@ -150,7 +150,7 @@ impl Context {
/// Starts the IO scheduler.
pub async fn start_io(&self) {
info!(self, "starting IO");
if self.is_io_running().await {
if self.inner.is_io_running().await {
info!(self, "IO is already running");
return;
}
@@ -161,11 +161,6 @@ impl Context {
}
}
/// Returns if the IO scheduler is running.
pub async fn is_io_running(&self) -> bool {
self.inner.is_io_running().await
}
/// Stops the IO scheduler.
pub async fn stop_io(&self) {
info!(self, "stopping IO");