]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change cancel to thread with wait
authorBastian Dehn <hhaalo@arcor.de>
Sun, 24 Nov 2024 08:26:23 +0000 (09:26 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 24 Nov 2024 08:27:48 +0000 (09:27 +0100)
src/kds_s2000w_handler.c
src/kds_s2000w_handler.h
src/kds_s2000w_net.c
tests/kds_s2000w_net_read_tests.c
tests/kds_s2000w_net_read_tests.h
tests/kds_s2000w_net_read_tests_run.c
tests/kds_s2000w_net_tests.c
tests/kds_s2000w_net_tests.h
tests/kds_s2000w_net_tests_run.c

index ee3bc32b2b6b2c01432bc608f922850d95304a6e..a1888761193dc762da4bb09c3b5df4dd6937d769 100644 (file)
@@ -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
index 237cd3d4076b6b4a6880f38d795e41972053c269..7433b9d1512420f89e084d9d2720598304089658 100644 (file)
@@ -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);
index 2d3236ea18fcac629aeff67def7005881ec4c39f..7363d279343434ea38506f4a35428f12e59dad16 100644 (file)
@@ -3,6 +3,7 @@
 #include <string.h>
 #include <unistd.h>
 #include <math.h>
+#include <pthread.h>
 #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;
        }
index 81fa72e96c83da30132268edd8c25cd84bfc7a28..67c7bb41b52b2fd203cdc680bc1179d9426ec1da 100644 (file)
@@ -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;
index b306155b6d7cbc56cb5aee7a43c8e91155fdceb1..cce2a3eb3fbc781efee5472fca0ca4885916d0e3 100644 (file)
@@ -6,7 +6,6 @@
 #include <setjmp.h>
 #include <cmocka.h>
 
-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();
index 47cef1d9e31198608883ae2e7b866f51ec6ea7da..ba50bd4f288b61fa51217a5a72663ec943b0490d 100644 (file)
@@ -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),
index 6400ec28a1673fd120d859d28d2f04a3d1ae01f1..fbecc7557722c411c3e6efe5966cdfe4ed0a3033 100644 (file)
@@ -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();
index 9a9a419b6360daf37a88fe3751d4be4d203f9d27..41fdd700c65076d89e6b047609d653fe30810b76 100644 (file)
@@ -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();
index d41cadee0132736255c5ba6e7e3c77acd5c6c5c3..816dd0849555944309368feb9dd1b8b34e888845 100644 (file)
@@ -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),