22
22
#include <assert.h>
23
23
z_owned_mutex_t mu ;
24
24
25
+ typedef struct z_val_t {
26
+ int val ;
27
+ bool dropped ;
28
+ } z_val_t ;
29
+
30
+ void drop (void * arg ) {
31
+ z_mutex_lock (z_loan_mut (mu ));
32
+ z_val_t * val = (z_val_t * )arg ;
33
+ val -> dropped = true;
34
+ z_mutex_unlock (z_loan_mut (mu ));
35
+ }
36
+
25
37
void data_handler (z_loaned_sample_t * sample , void * arg ) {
26
- int * val = (int * )arg ;
38
+ z_val_t * val = (z_val_t * )arg ;
27
39
z_mutex_lock (z_loan_mut (mu ));
28
- (* val )++ ;
40
+ (val -> val )++ ;
29
41
z_mutex_unlock (z_loan_mut (mu ));
30
42
z_sleep_s (5 );
31
43
z_mutex_lock (z_loan_mut (mu ));
32
- (* val )++ ;
44
+ (val -> val )++ ;
33
45
z_mutex_unlock (z_loan_mut (mu ));
34
46
}
35
47
36
48
void query_handler (z_loaned_query_t * query , void * arg ) {
37
- int * val = (int * )arg ;
49
+ z_val_t * val = (z_val_t * )arg ;
38
50
z_mutex_lock (z_loan_mut (mu ));
39
- (* val )++ ;
51
+ (val -> val )++ ;
40
52
z_mutex_unlock (z_loan_mut (mu ));
41
53
z_sleep_s (5 );
42
54
z_mutex_lock (z_loan_mut (mu ));
43
- (* val )++ ;
55
+ (val -> val )++ ;
44
56
z_mutex_unlock (z_loan_mut (mu ));
45
57
46
58
z_view_keyexpr_t ke ;
@@ -51,13 +63,13 @@ void query_handler(z_loaned_query_t *query, void *arg) {
51
63
}
52
64
53
65
void reply_handler (z_loaned_reply_t * reply , void * arg ) {
54
- int * val = (int * )arg ;
66
+ z_val_t * val = (z_val_t * )arg ;
55
67
z_mutex_lock (z_loan_mut (mu ));
56
- (* val )++ ;
68
+ (val -> val )++ ;
57
69
z_mutex_unlock (z_loan_mut (mu ));
58
70
z_sleep_s (5 );
59
71
z_mutex_lock (z_loan_mut (mu ));
60
- (* val )++ ;
72
+ (val -> val )++ ;
61
73
z_mutex_unlock (z_loan_mut (mu ));
62
74
}
63
75
@@ -74,10 +86,10 @@ void test_pub_sub() {
74
86
assert (z_open (& s1 , z_move (c1 ), NULL ) == Z_OK );
75
87
assert (z_open (& s2 , z_move (c2 ), NULL ) == Z_OK );
76
88
77
- int val = 0 ;
89
+ z_val_t val = { 0 , false} ;
78
90
z_owned_subscriber_t sub ;
79
91
z_owned_closure_sample_t callback ;
80
- z_closure (& callback , data_handler , NULL , (void * )& val );
92
+ z_closure (& callback , data_handler , drop , (void * )& val );
81
93
assert (z_declare_subscriber (z_loan (s1 ), & sub , z_loan (ke ), z_move (callback ), NULL ) == Z_OK );
82
94
z_sleep_s (1 );
83
95
z_owned_bytes_t p ;
@@ -86,11 +98,10 @@ void test_pub_sub() {
86
98
87
99
z_sleep_s (1 );
88
100
z_drop (z_move (sub ));
89
- int out = 0 ;
90
101
z_mutex_lock (z_loan_mut (mu ));
91
- out = val ;
102
+ assert (val .dropped );
103
+ assert (val .val == 2 );
92
104
z_mutex_unlock (z_loan_mut (mu ));
93
- assert (out == 2 );
94
105
95
106
z_drop (z_move (s1 ));
96
107
z_drop (z_move (s2 ));
@@ -110,32 +121,33 @@ void test_query_reply() {
110
121
assert (z_open (& s1 , z_move (c1 ), NULL ) == Z_OK );
111
122
assert (z_open (& s2 , z_move (c2 ), NULL ) == Z_OK );
112
123
113
- int val = 0 ;
124
+ z_val_t query_val = {0 , false};
125
+ z_val_t reply_val = {0 , false};
126
+
114
127
z_owned_queryable_t q ;
115
128
z_owned_closure_query_t q_callback ;
116
- z_closure (& q_callback , query_handler , NULL , (void * )& val );
129
+ z_closure (& q_callback , query_handler , drop , (void * )& query_val );
117
130
118
131
assert (z_declare_queryable (z_loan (s1 ), & q , z_loan (ke ), z_move (q_callback ), NULL ) == Z_OK );
119
132
z_sleep_s (1 );
120
133
121
134
z_owned_closure_reply_t r_callback ;
122
- z_closure (& r_callback , reply_handler , NULL , (void * )& val );
135
+ z_closure (& r_callback , reply_handler , drop , (void * )& reply_val );
123
136
assert (z_get (z_loan (s2 ), z_loan (ke ), "" , z_move (r_callback ), NULL ) == Z_OK );
124
137
125
138
z_sleep_s (1 );
126
139
z_drop (z_move (q ));
127
- int out = 0 ;
128
140
z_mutex_lock (z_loan_mut (mu ));
129
- out = val ;
141
+ assert (query_val .dropped );
142
+ assert (query_val .val == 2 );
130
143
z_mutex_unlock (z_loan_mut (mu ));
131
- assert (out == 2 );
132
144
133
145
z_sleep_s (1 );
134
146
z_drop (z_move (s2 ));
135
147
z_mutex_lock (z_loan_mut (mu ));
136
- out = val ;
148
+ assert (reply_val .dropped );
149
+ assert (reply_val .val == 2 );
137
150
z_mutex_unlock (z_loan_mut (mu ));
138
- assert (out == 4 );
139
151
140
152
z_drop (z_move (s1 ));
141
153
z_drop (z_move (mu ));
0 commit comments