mirror of
https://github.com/chatmail/core.git
synced 2026-04-29 11:26:29 +03:00
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:
committed by
link2xt
parent
ebccdbbcb9
commit
8412affe37
@@ -532,7 +532,6 @@ int dc_is_configured (const dc_context_t* context);
|
|||||||
/**
|
/**
|
||||||
* Start job and IMAP/SMTP tasks.
|
* Start job and IMAP/SMTP tasks.
|
||||||
* If IO is already running, nothing happens.
|
* 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,
|
* If the context was created by the dc_accounts_t account manager,
|
||||||
* use dc_accounts_start_io() instead of this function.
|
* 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);
|
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
|
* Stop job, IMAP, SMTP and other tasks and return when they
|
||||||
* are finished.
|
* are finished.
|
||||||
* To check the current IO state, use dc_is_io_running().
|
*
|
||||||
* Even if IO is not running, there may be pending tasks,
|
* Even if IO is not running, there may be pending tasks,
|
||||||
* so this function should always be called before releasing
|
* so this function should always be called before releasing
|
||||||
* context to ensure clean termination of event loop.
|
* context to ensure clean termination of event loop.
|
||||||
|
|||||||
@@ -296,16 +296,6 @@ pub unsafe extern "C" fn dc_start_io(context: *mut dc_context_t) {
|
|||||||
block_on(ctx.start_io())
|
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]
|
#[no_mangle]
|
||||||
pub unsafe extern "C" fn dc_get_id(context: *mut dc_context_t) -> libc::c_int {
|
pub unsafe extern "C" fn dc_get_id(context: *mut dc_context_t) -> libc::c_int {
|
||||||
if context.is_null() {
|
if context.is_null() {
|
||||||
|
|||||||
@@ -459,8 +459,6 @@ class Account(object):
|
|||||||
If sending out was unsuccessful, a RuntimeError is raised.
|
If sending out was unsuccessful, a RuntimeError is raised.
|
||||||
"""
|
"""
|
||||||
self.check_is_configured()
|
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)
|
res = lib.dc_initiate_key_transfer(self._dc_context)
|
||||||
if res == ffi.NULL:
|
if res == ffi.NULL:
|
||||||
raise RuntimeError("could not send out autocrypt setup message")
|
raise RuntimeError("could not send out autocrypt setup message")
|
||||||
@@ -592,9 +590,6 @@ class Account(object):
|
|||||||
lib.dc_configure(self._dc_context)
|
lib.dc_configure(self._dc_context)
|
||||||
return configtracker
|
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):
|
def wait_shutdown(self):
|
||||||
""" wait until shutdown of this account has completed. """
|
""" wait until shutdown of this account has completed. """
|
||||||
self._shutdown_event.wait()
|
self._shutdown_event.wait()
|
||||||
@@ -604,11 +599,8 @@ class Account(object):
|
|||||||
self.log("stop_ongoing")
|
self.log("stop_ongoing")
|
||||||
self.stop_ongoing()
|
self.stop_ongoing()
|
||||||
|
|
||||||
if bool(lib.dc_is_io_running(self._dc_context)):
|
self.log("dc_stop_io (stop core IO scheduler)")
|
||||||
self.log("dc_stop_io (stop core IO scheduler)")
|
lib.dc_stop_io(self._dc_context)
|
||||||
lib.dc_stop_io(self._dc_context)
|
|
||||||
else:
|
|
||||||
self.log("stop_scheduler called on non-running context")
|
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
""" shutdown and destroy account (stop callback thread, close and remove
|
""" shutdown and destroy account (stop callback thread, close and remove
|
||||||
|
|||||||
@@ -361,7 +361,7 @@ def acfactory(pytestconfig, tmpdir, request, session_liveconfig, data):
|
|||||||
for acc in self._accounts:
|
for acc in self._accounts:
|
||||||
self.wait_configure(acc)
|
self.wait_configure(acc)
|
||||||
acc.set_config("bcc_self", "0")
|
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()
|
acc.start_io()
|
||||||
started_accounts.append(acc)
|
started_accounts.append(acc)
|
||||||
print("{}: {} account was successfully setup".format(
|
print("{}: {} account was successfully setup".format(
|
||||||
|
|||||||
@@ -488,10 +488,6 @@ class TestOfflineChat:
|
|||||||
assert messages[0].text == "msg1"
|
assert messages[0].text == "msg1"
|
||||||
assert os.path.exists(messages[1].filename)
|
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):
|
def test_set_get_draft(self, chat1):
|
||||||
msg = Message.new_empty(chat1.account, "text")
|
msg = Message.new_empty(chat1.account, "text")
|
||||||
msg1 = chat1.prepare_message(msg)
|
msg1 = chat1.prepare_message(msg)
|
||||||
|
|||||||
@@ -1620,10 +1620,6 @@ pub async fn send_msg_sync(
|
|||||||
chat_id: ChatId,
|
chat_id: ChatId,
|
||||||
msg: &mut Message,
|
msg: &mut Message,
|
||||||
) -> Result<MsgId, Error> {
|
) -> 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? {
|
if let Some(mut job) = prepare_send_msg(context, chat_id, msg).await? {
|
||||||
let mut smtp = crate::smtp::Smtp::new();
|
let mut smtp = crate::smtp::Smtp::new();
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ impl Context {
|
|||||||
/// Starts the IO scheduler.
|
/// Starts the IO scheduler.
|
||||||
pub async fn start_io(&self) {
|
pub async fn start_io(&self) {
|
||||||
info!(self, "starting IO");
|
info!(self, "starting IO");
|
||||||
if self.is_io_running().await {
|
if self.inner.is_io_running().await {
|
||||||
info!(self, "IO is already running");
|
info!(self, "IO is already running");
|
||||||
return;
|
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.
|
/// Stops the IO scheduler.
|
||||||
pub async fn stop_io(&self) {
|
pub async fn stop_io(&self) {
|
||||||
info!(self, "stopping IO");
|
info!(self, "stopping IO");
|
||||||
|
|||||||
Reference in New Issue
Block a user