From 5eeca756809aa20878ab948a95845c3afdcf8d2c Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 24 Nov 2024 09:26:23 +0100 Subject: [PATCH] change cancel to thread with wait --- src/kds_s2000w_handler.c | 9 +++++++++ src/kds_s2000w_handler.h | 1 + src/kds_s2000w_net.c | 10 ++++++--- tests/kds_s2000w_net_read_tests.c | 20 ------------------ tests/kds_s2000w_net_read_tests.h | 1 - tests/kds_s2000w_net_read_tests_run.c | 1 - tests/kds_s2000w_net_tests.c | 29 --------------------------- tests/kds_s2000w_net_tests.h | 2 -- tests/kds_s2000w_net_tests_run.c | 2 -- 9 files changed, 17 insertions(+), 58 deletions(-) diff --git a/src/kds_s2000w_handler.c b/src/kds_s2000w_handler.c index ee3bc32..a188876 100644 --- a/src/kds_s2000w_handler.c +++ b/src/kds_s2000w_handler.c @@ -214,6 +214,15 @@ void free_handler(handler* h) h = NULL; } +void* cancel_reset_handler(void* h) +{ + handler* handle = (handler*) h; + sleep(2); + reset_handler(handle); + + return NULL; +} + void reset_handler(handler* h) { #ifndef NODEBUG diff --git a/src/kds_s2000w_handler.h b/src/kds_s2000w_handler.h index 237cd3d..7433b9d 100644 --- a/src/kds_s2000w_handler.h +++ b/src/kds_s2000w_handler.h @@ -59,6 +59,7 @@ typedef struct { handler* init_handler(); void free_handler(handler* h); +void* cancel_reset_handler(void* h); void reset_handler(handler* h); void kds_s2000w_handler_recreate_session(handler* h); void kds_s2000w_handler_open(const char* devicename, void** handle); diff --git a/src/kds_s2000w_net.c b/src/kds_s2000w_net.c index 2d3236e..7363d27 100644 --- a/src/kds_s2000w_net.c +++ b/src/kds_s2000w_net.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "config.h" #include "kds_s2000w_net.h" #include "kds_s2000w_option_descriptors.h" @@ -162,7 +163,8 @@ SANE_Status _sane_kds_s2000w_net_get_parameters(SANE_Handle handle, handler* h = (handler*) handle; if (h->read_info->cancel) { - reset_handler(h); + pthread_t reset_thread; + pthread_create(&reset_thread, NULL, cancel_reset_handler, handle); return SANE_STATUS_CANCELLED; } @@ -198,7 +200,8 @@ SANE_Status _sane_kds_s2000w_net_start(SANE_Handle handle) handler* h = (handler*) handle; if (h->read_info->cancel) { - reset_handler(h); + pthread_t reset_thread; + pthread_create(&reset_thread, NULL, cancel_reset_handler, handle); return SANE_STATUS_CANCELLED; } @@ -252,7 +255,8 @@ SANE_Status _sane_kds_s2000w_net_read(SANE_Handle handle, SANE_Byte* data, // cancel if (h->read_info->cancel) { - reset_handler(h); + pthread_t reset_thread; + pthread_create(&reset_thread, NULL, cancel_reset_handler, handle); *length = 0; return SANE_STATUS_CANCELLED; } diff --git a/tests/kds_s2000w_net_read_tests.c b/tests/kds_s2000w_net_read_tests.c index 81fa72e..67c7bb4 100644 --- a/tests/kds_s2000w_net_read_tests.c +++ b/tests/kds_s2000w_net_read_tests.c @@ -24,26 +24,6 @@ void __wrap_wait_a_second() return; } -void sane_kds_s2000w_net_read_cancel_test() -{ - handler* h = init_handler(); - h->read_info->scan_started = 1; - h->read_info->cancel = 1; - int* length = malloc(sizeof(int)); - *length = 0; - - SANE_Status status = _sane_kds_s2000w_net_read(h, NULL, 0, length); - - assert_int_equal(h->read_info->cancel, 0); - assert_int_equal(h->read_info->scan_started, 0); - assert_int_equal(status, SANE_STATUS_CANCELLED); - - free(length); - length = NULL; - free_handler(h); - h = NULL; -} - void sane_kds_s2000w_net_read_without_data() { int length = 0; diff --git a/tests/kds_s2000w_net_read_tests.h b/tests/kds_s2000w_net_read_tests.h index b306155..cce2a3e 100644 --- a/tests/kds_s2000w_net_read_tests.h +++ b/tests/kds_s2000w_net_read_tests.h @@ -6,7 +6,6 @@ #include #include -void sane_kds_s2000w_net_read_cancel_test(); void sane_kds_s2000w_net_read_without_data(); void sane_kds_s2000w_net_read_empty_image(); void sane_kds_s2000w_net_read_without_header_test(); diff --git a/tests/kds_s2000w_net_read_tests_run.c b/tests/kds_s2000w_net_read_tests_run.c index 47cef1d..ba50bd4 100644 --- a/tests/kds_s2000w_net_read_tests_run.c +++ b/tests/kds_s2000w_net_read_tests_run.c @@ -3,7 +3,6 @@ int main() { const struct CMUnitTest net_read_tests[] = { - cmocka_unit_test(sane_kds_s2000w_net_read_cancel_test), cmocka_unit_test(sane_kds_s2000w_net_read_without_data), cmocka_unit_test(sane_kds_s2000w_net_read_empty_image), cmocka_unit_test(sane_kds_s2000w_net_read_without_header_test), diff --git a/tests/kds_s2000w_net_tests.c b/tests/kds_s2000w_net_tests.c index 6400ec2..fbecc75 100644 --- a/tests/kds_s2000w_net_tests.c +++ b/tests/kds_s2000w_net_tests.c @@ -112,21 +112,6 @@ void kds_s2000w_net_get_select_fd() assert_int_equal(result, SANE_STATUS_UNSUPPORTED); } - -void sane_kds_s2000w_net_start_cancel() -{ - handler* h = init_handler(); - h->read_info->cancel = 1; - - SANE_Status status = _sane_kds_s2000w_net_start(h); - - assert_int_equal(h->read_info->cancel, 0); - assert_int_equal(status, SANE_STATUS_CANCELLED); - - free_handler(h); - h = NULL; -} - void sane_kds_s2000w_net_start(void** state) { response** response_list = (response**) *state; @@ -528,20 +513,6 @@ void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state) h = NULL; } -void sane_kds_s2000w_net_get_parameter_cancel() -{ - handler* h = init_handler(); - h->read_info->cancel = 1; - - SANE_Status status = _sane_kds_s2000w_net_get_parameters(h, NULL); - - assert_int_equal(h->read_info->cancel, 0); - assert_int_equal(status, SANE_STATUS_CANCELLED); - - free_handler(h); - h = NULL; -} - void sane_kds_s2000w_net_cancel() { response* resp = kds_s2000w_client_response_init(); diff --git a/tests/kds_s2000w_net_tests.h b/tests/kds_s2000w_net_tests.h index 9a9a419..41fdd70 100644 --- a/tests/kds_s2000w_net_tests.h +++ b/tests/kds_s2000w_net_tests.h @@ -12,13 +12,11 @@ void kds_s2000w_net_init(); void kds_s2000w_net_get_devices_only_remote(); void kds_s2000w_net_set_io_mode(); void kds_s2000w_net_get_select_fd(); -void sane_kds_s2000w_net_start_cancel(); void sane_kds_s2000w_net_start(void** state); void sane_kds_s2000w_net_start_one_page_per_flatscan(void** state); void sane_kds_s2000w_net_start_one_page_per_feeder(void** state); void sane_kds_s2000w_net_start_two_pages_per_feeder(void** state); void sane_kds_s2000w_net_start_slow_two_pages_per_feeder(void** state); -void sane_kds_s2000w_net_get_parameter_cancel(); void sane_kds_s2000w_net_cancel(); void sane_kds_s2000w_net_open(); void sane_kds_s2000w_net_open_busy_device(); diff --git a/tests/kds_s2000w_net_tests_run.c b/tests/kds_s2000w_net_tests_run.c index d41cade..816dd08 100644 --- a/tests/kds_s2000w_net_tests_run.c +++ b/tests/kds_s2000w_net_tests_run.c @@ -69,8 +69,6 @@ int main() cmocka_unit_test(kds_s2000w_net_get_devices_only_remote), cmocka_unit_test(kds_s2000w_net_set_io_mode), cmocka_unit_test(kds_s2000w_net_get_select_fd), - cmocka_unit_test(sane_kds_s2000w_net_start_cancel), - cmocka_unit_test(sane_kds_s2000w_net_get_parameter_cancel), cmocka_unit_test(sane_kds_s2000w_net_cancel), cmocka_unit_test(sane_kds_s2000w_net_open), cmocka_unit_test(sane_kds_s2000w_net_open_busy_device), -- 2.39.5