Skip to content

Commit 9147b53

Browse files
VudentzAnas Nashif
authored andcommitted
net: Remove check for k_delayed_work_cancel
k_delayed_work_cancel now only fail if it hasn't been submitted which means it is not in use anyway so it safe to reset its data regardless of its return. Signed-off-by: Luiz Augusto von Dentz <[email protected]>
1 parent 26cd8ce commit 9147b53

File tree

8 files changed

+14
-95
lines changed

8 files changed

+14
-95
lines changed

include/net/http.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -785,9 +785,6 @@ struct http_server_ctx {
785785

786786
/** URL's length */
787787
u16_t url_len;
788-
789-
/** Has the request timer been cancelled. */
790-
u8_t timer_cancelled;
791788
} req;
792789

793790
#if defined(CONFIG_HTTPS)

include/net/net_app.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,6 @@ struct net_app_ctx {
300300
/** DTLS final timer. Connection is terminated if this expires.
301301
*/
302302
struct k_delayed_work fin_timer;
303-
304-
/** Timer flag telling whether the dtls timer has been
305-
* cancelled or not.
306-
*/
307-
bool fin_timer_cancelled;
308303
} dtls;
309304
#endif
310305

subsys/net/ip/ipv6.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -222,12 +222,7 @@ struct net_ipv6_nbr_data *net_ipv6_get_nbr_by_index(u8_t idx)
222222

223223
static inline void nbr_clear_ns_pending(struct net_ipv6_nbr_data *data)
224224
{
225-
int ret;
226-
227-
ret = k_delayed_work_cancel(&data->send_ns);
228-
if (ret < 0) {
229-
NET_DBG("Cannot cancel NS work (%d)", ret);
230-
}
225+
k_delayed_work_cancel(&data->send_ns);
231226

232227
if (data->pending) {
233228
net_pkt_unref(data->pending);

subsys/net/ip/net_context.c

Lines changed: 10 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,16 @@ static struct tcp_backlog_entry {
100100
u32_t send_seq;
101101
u32_t send_ack;
102102
struct k_delayed_work ack_timer;
103-
bool cancelled;
104103
} tcp_backlog[CONFIG_NET_TCP_BACKLOG_SIZE];
105104

106105
static void backlog_ack_timeout(struct k_work *work)
107106
{
108107
struct tcp_backlog_entry *backlog =
109108
CONTAINER_OF(work, struct tcp_backlog_entry, ack_timer);
110109

111-
if (!backlog->cancelled) {
112-
NET_DBG("Did not receive ACK in %dms", ACK_TIMEOUT);
110+
NET_DBG("Did not receive ACK in %dms", ACK_TIMEOUT);
113111

114-
send_reset(backlog->tcp->context, &backlog->remote);
115-
}
112+
send_reset(backlog->tcp->context, &backlog->remote);
116113

117114
memset(backlog, 0, sizeof(struct tcp_backlog_entry));
118115
}
@@ -265,17 +262,8 @@ static int tcp_backlog_ack(struct net_pkt *pkt, struct net_context *context)
265262
context->tcp->send_seq = tcp_backlog[r].send_seq;
266263
context->tcp->send_ack = tcp_backlog[r].send_ack;
267264

268-
if (k_delayed_work_cancel(&tcp_backlog[r].ack_timer) < 0) {
269-
/* Too late to cancel - just set flag for worker.
270-
* TODO: Note that in this case, we can be preempted
271-
* anytime (could have been preempted even before we did
272-
* the check), so access to tcp_backlog should be synchronized
273-
* between this function and worker.
274-
*/
275-
tcp_backlog[r].cancelled = true;
276-
} else {
277-
memset(&tcp_backlog[r], 0, sizeof(struct tcp_backlog_entry));
278-
}
265+
k_delayed_work_cancel(&tcp_backlog[r].ack_timer);
266+
memset(&tcp_backlog[r], 0, sizeof(struct tcp_backlog_entry));
279267

280268
return 0;
281269
}
@@ -300,17 +288,8 @@ static int tcp_backlog_rst(struct net_pkt *pkt)
300288
return -EINVAL;
301289
}
302290

303-
if (k_delayed_work_cancel(&tcp_backlog[r].ack_timer) < 0) {
304-
/* Too late to cancel - just set flag for worker.
305-
* TODO: Note that in this case, we can be preempted
306-
* anytime (could have been preempted even before we did
307-
* the check), so access to tcp_backlog should be synchronized
308-
* between this function and worker.
309-
*/
310-
tcp_backlog[r].cancelled = true;
311-
} else {
312-
memset(&tcp_backlog[r], 0, sizeof(struct tcp_backlog_entry));
313-
}
291+
k_delayed_work_cancel(&tcp_backlog[r].ack_timer);
292+
memset(&tcp_backlog[r], 0, sizeof(struct tcp_backlog_entry));
314293

315294
return 0;
316295
}
@@ -320,22 +299,16 @@ static void handle_fin_timeout(struct k_work *work)
320299
struct net_tcp *tcp =
321300
CONTAINER_OF(work, struct net_tcp, fin_timer);
322301

323-
if (!tcp->fin_timer_cancelled) {
324-
NET_DBG("Did not receive FIN in %dms", FIN_TIMEOUT);
302+
NET_DBG("Did not receive FIN in %dms", FIN_TIMEOUT);
325303

326-
net_context_unref(tcp->context);
327-
}
304+
net_context_unref(tcp->context);
328305
}
329306

330307
static void handle_ack_timeout(struct k_work *work)
331308
{
332309
/* This means that we did not receive ACK response in time. */
333310
struct net_tcp *tcp = CONTAINER_OF(work, struct net_tcp, ack_timer);
334311

335-
if (tcp->ack_timer_cancelled) {
336-
return;
337-
}
338-
339312
NET_DBG("Did not receive ACK in %dms while in %s", ACK_TIMEOUT,
340313
net_tcp_state_str(net_tcp_get_state(tcp)));
341314

@@ -641,13 +614,8 @@ int net_context_unref(struct net_context *context)
641614
continue;
642615
}
643616

644-
if (k_delayed_work_cancel(&tcp_backlog[i].ack_timer) ==
645-
-EINPROGRESS) {
646-
tcp_backlog[i].cancelled = true;
647-
} else {
648-
memset(&tcp_backlog[i], 0,
649-
sizeof(struct tcp_backlog_entry));
650-
}
617+
k_delayed_work_cancel(&tcp_backlog[i].ack_timer);
618+
memset(&tcp_backlog[i], 0, sizeof(tcp_backlog[i]));
651619
}
652620

653621
net_tcp_release(context->tcp);
@@ -701,7 +669,6 @@ int net_context_put(struct net_context *context)
701669
"disposing yet (waiting %dms)", FIN_TIMEOUT);
702670
k_delayed_work_submit(&context->tcp->fin_timer,
703671
FIN_TIMEOUT);
704-
context->tcp->fin_timer_cancelled = false;
705672
queue_fin(context);
706673
return 0;
707674
}
@@ -1247,7 +1214,6 @@ NET_CONN_CB(tcp_established)
12471214
* would be stuck forever.
12481215
*/
12491216
k_delayed_work_submit(&context->tcp->ack_timer, ACK_TIMEOUT);
1250-
context->tcp->ack_timer_cancelled = false;
12511217
}
12521218

12531219
send_ack(context, &conn->remote_addr, false);

subsys/net/ip/tcp.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,13 +248,11 @@ struct net_tcp *net_tcp_alloc(struct net_context *context)
248248

249249
static void ack_timer_cancel(struct net_tcp *tcp)
250250
{
251-
tcp->ack_timer_cancelled = true;
252251
k_delayed_work_cancel(&tcp->ack_timer);
253252
}
254253

255254
static void fin_timer_cancel(struct net_tcp *tcp)
256255
{
257-
tcp->fin_timer_cancelled = true;
258256
k_delayed_work_cancel(&tcp->fin_timer);
259257
}
260258

subsys/net/ip/tcp.h

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -135,15 +135,8 @@ struct net_tcp {
135135
u32_t fin_sent : 1;
136136
/* An inbound FIN packet has been received */
137137
u32_t fin_rcvd : 1;
138-
/* Tells if ack timer has been already cancelled. It might happen
139-
* that the timer is executed even if it is cancelled, this is because
140-
* of various timing issues when timer is scheduled to run.
141-
*/
142-
u32_t ack_timer_cancelled : 1;
143-
/* Tells if fin timer has been already cancelled. */
144-
u32_t fin_timer_cancelled : 1;
145138
/** Remaining bits in this u32_t */
146-
u32_t _padding : 11;
139+
u32_t _padding : 13;
147140

148141
/** Accept callback to be called when the connection has been
149142
* established.

subsys/net/lib/app/net_app.c

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,8 +1041,6 @@ static int dtls_timing_get_delay(void *data)
10411041

10421042
static void dtls_cleanup(struct net_app_ctx *ctx, bool cancel_timer)
10431043
{
1044-
ctx->dtls.fin_timer_cancelled = true;
1045-
10461044
if (cancel_timer) {
10471045
k_delayed_work_cancel(&ctx->dtls.fin_timer);
10481046
}
@@ -1060,11 +1058,9 @@ static void dtls_timeout(struct k_work *work)
10601058
struct net_app_ctx *ctx =
10611059
CONTAINER_OF(work, struct net_app_ctx, dtls.fin_timer);
10621060

1063-
if (!ctx->dtls.fin_timer_cancelled) {
1064-
NET_DBG("Did not receive DTLS traffic in %dms", DTLS_TIMEOUT);
1061+
NET_DBG("Did not receive DTLS traffic in %dms", DTLS_TIMEOUT);
10651062

1066-
dtls_cleanup(ctx, false);
1067-
}
1063+
dtls_cleanup(ctx, false);
10681064
}
10691065

10701066
enum net_verdict _net_app_dtls_established(struct net_conn *conn,
@@ -1117,12 +1113,10 @@ enum net_verdict _net_app_dtls_established(struct net_conn *conn,
11171113

11181114
k_fifo_put(&ctx->tls.mbedtls.ssl_ctx.tx_rx_fifo, (void *)rx_data);
11191115

1120-
ctx->dtls.fin_timer_cancelled = true;
11211116
k_delayed_work_cancel(&ctx->dtls.fin_timer);
11221117

11231118
k_yield();
11241119

1125-
ctx->dtls.fin_timer_cancelled = false;
11261120
k_delayed_work_submit(&ctx->dtls.fin_timer, DTLS_TIMEOUT);
11271121

11281122
return NET_OK;
@@ -1226,7 +1220,6 @@ static int accept_dtls(struct net_app_ctx *ctx,
12261220

12271221
ctx->dtls.ctx = dtls_context;
12281222

1229-
ctx->dtls.fin_timer_cancelled = false;
12301223
k_delayed_work_submit(&ctx->dtls.fin_timer, DTLS_TIMEOUT);
12311224

12321225
return 0;
@@ -1279,17 +1272,6 @@ void _net_app_tls_received(struct net_context *context,
12791272
net_pkt_unref(pkt);
12801273
return;
12811274
} else {
1282-
if (ctx->dtls.fin_timer_cancelled) {
1283-
if (pkt) {
1284-
net_pkt_unref(pkt);
1285-
pkt = NULL;
1286-
}
1287-
1288-
ctx->dtls.fin_timer_cancelled = false;
1289-
1290-
goto dtls_disconnect;
1291-
}
1292-
12931275
ret = accept_dtls(ctx, context, pkt);
12941276
if (ret < 0) {
12951277
NET_DBG("Cannot accept new DTLS "

subsys/net/lib/http/http_server.c

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,6 @@ static int http_add_chunk(struct net_pkt *pkt, s32_t timeout, const char *str)
152152

153153
static void req_timer_cancel(struct http_server_ctx *ctx)
154154
{
155-
ctx->req.timer_cancelled = true;
156155
k_delayed_work_cancel(&ctx->req.timer);
157156

158157
NET_DBG("Context %p request timer cancelled", ctx);
@@ -164,10 +163,6 @@ static void req_timeout(struct k_work *work)
164163
struct http_server_ctx,
165164
req.timer);
166165

167-
if (ctx->req.timer_cancelled) {
168-
return;
169-
}
170-
171166
NET_DBG("Context %p request timeout", ctx);
172167

173168
net_context_put(ctx->req.net_ctx);
@@ -194,8 +189,6 @@ static void pkt_sent(struct net_context *context,
194189
NET_DBG("Context %p starting timer", ctx);
195190

196191
k_delayed_work_submit(&ctx->req.timer, timeout);
197-
198-
ctx->req.timer_cancelled = false;
199192
}
200193

201194
/* Note that if the timeout is K_FOREVER, we do not close

0 commit comments

Comments
 (0)