@@ -21,8 +21,8 @@ enum sock_mt_stat{
21
21
};
22
22
23
23
enum sock_mt_shutdown {
24
- SOCK_MT_SHUTDOWN_NONE = 0 ,
25
- SOCK_MT_SHUTDOWN_OK
24
+ SOCK_MT_SHUTDOWN_OK = 0 ,
25
+ SOCK_MT_SHUTDOWN_NONE
26
26
};
27
27
28
28
enum sock_mt_module {
@@ -88,15 +88,21 @@ typedef struct _sock_mt sock_mt_t;
88
88
SYS_ARCH_DECL_PROTECT(lev); \
89
89
\
90
90
SYS_ARCH_PROTECT(lev); \
91
- if (sockets_mt[s].lock[l]) \
92
- err = sys_mutex_trylock(&sockets_mt[s].lock[l]); \
91
+ if (SOCK_MT_GET_SHUTDOWN(s) != SOCK_MT_SHUTDOWN_NONE) \
92
+ err = ERR_CLSD; \
93
93
else \
94
- err = ERR_VAL; \
94
+ err = ERR_OK; \
95
+ if (err == ERR_OK) { \
96
+ if (sockets_mt[s].lock[l]) \
97
+ err = sys_mutex_trylock(&sockets_mt[s].lock[l]); \
98
+ else \
99
+ err = ERR_VAL; \
100
+ } \
95
101
SYS_ARCH_UNPROTECT(lev); \
96
102
\
97
103
if (err == ERR_OK) \
98
104
break; \
99
- else if (err == ERR_VAL) \
105
+ else if (err == ERR_VAL || err == ERR_CLSD) \
100
106
return -1; \
101
107
\
102
108
vTaskDelay(1); \
@@ -111,13 +117,19 @@ typedef struct _sock_mt sock_mt_t;
111
117
SYS_ARCH_DECL_PROTECT(lev); \
112
118
\
113
119
SYS_ARCH_PROTECT(lev); \
114
- if (sockets_mt[s].lock[l]) \
115
- r = sys_mutex_trylock(&sockets_mt[s].lock[l]); \
120
+ if (SOCK_MT_GET_SHUTDOWN(s) != SOCK_MT_SHUTDOWN_NONE) \
121
+ r = ERR_CLSD; \
116
122
else \
117
- r = ERR_VAL; \
123
+ r = ERR_OK; \
124
+ if (r == ERR_OK) { \
125
+ if (sockets_mt[s].lock[l]) \
126
+ r = sys_mutex_trylock(&sockets_mt[s].lock[l]); \
127
+ else \
128
+ r = ERR_VAL; \
129
+ } \
118
130
SYS_ARCH_UNPROTECT(lev); \
119
131
\
120
- if (r == ERR_OK || ERR_VAL) \
132
+ if (r == ERR_OK || r == ERR_VAL || r == ERR_CLSD) \
121
133
break; \
122
134
vTaskDelay(1); \
123
135
} \
@@ -242,16 +254,9 @@ LOCAL int lwip_enter_mt_state(int s, int arg)
242
254
return -1 ;
243
255
244
256
SOCK_MT_LOCK (s , SOCK_MT_STATE_LOCK );
245
- if (SOCK_MT_GET_SHUTDOWN (s ) != SOCK_MT_SHUTDOWN_NONE ) {
246
- goto failed ;
247
- }
248
257
SOCK_MT_SET_STATE (s , arg );
249
258
250
259
return 0 ;
251
-
252
- failed :
253
- SOCK_MT_UNLOCK (s , SOCK_MT_STATE_LOCK );
254
- return -1 ;
255
260
}
256
261
257
262
LOCAL int lwip_enter_mt_recv (int s , int arg )
@@ -261,20 +266,14 @@ LOCAL int lwip_enter_mt_recv(int s, int arg)
261
266
return -1 ;
262
267
263
268
SOCK_MT_LOCK (s , SOCK_MT_RECV_LOCK );
264
- if (SOCK_MT_GET_SHUTDOWN (s ) != SOCK_MT_SHUTDOWN_NONE ) {
265
- goto failed ;
266
- }
267
269
268
270
return 0 ;
269
-
270
- failed :
271
- SOCK_MT_UNLOCK (s , SOCK_MT_RECV_LOCK );
272
- return -1 ;
273
271
}
274
272
275
273
LOCAL int lwip_enter_mt_shutdown (int s , int arg )
276
274
{
277
- if (tryget_socket (s ) == NULL )
275
+ if (tryget_socket (s ) == NULL
276
+ || SOCK_MT_GET_SHUTDOWN (s ) != SOCK_MT_SHUTDOWN_NONE )
278
277
return -1 ;
279
278
280
279
SOCK_MT_SET_SHUTDOWN (s , SOCK_MT_SHUTDOWN_OK );
@@ -313,7 +312,7 @@ LOCAL int lwip_enter_mt_select(int s, int arg)
313
312
314
313
SOCK_MT_SET_READ_SEL (i );
315
314
SOCK_MT_LOCK_RET (i , SOCK_MT_RECV_LOCK , err );
316
- if (err != ERR_OK || SOCK_MT_GET_SHUTDOWN ( i ) != SOCK_MT_SHUTDOWN_NONE ) {
315
+ if (err != ERR_OK ) {
317
316
goto failed2 ;
318
317
}
319
318
}
@@ -323,7 +322,7 @@ LOCAL int lwip_enter_mt_select(int s, int arg)
323
322
324
323
SOCK_MT_SET_WRITE_SEL (i );
325
324
SOCK_MT_LOCK_RET (i , SOCK_MT_STATE_LOCK , err );
326
- if (err != ERR_OK || SOCK_MT_GET_SHUTDOWN ( i ) != SOCK_MT_SHUTDOWN_NONE ) {
325
+ if (err != ERR_OK ) {
327
326
goto failed3 ;
328
327
}
329
328
}
@@ -361,15 +360,8 @@ LOCAL int lwip_enter_mt_ioctrl(int s, int arg)
361
360
return -1 ;
362
361
363
362
SOCK_MT_LOCK (s , SOCK_MT_IOCTRL_LOCK );
364
- if (SOCK_MT_GET_SHUTDOWN (s ) != SOCK_MT_SHUTDOWN_NONE ) {
365
- goto failed ;
366
- }
367
363
368
364
return 0 ;
369
-
370
- failed :
371
- SOCK_MT_UNLOCK (s , SOCK_MT_IOCTRL_LOCK );
372
- return -1 ;
373
365
}
374
366
375
367
LOCAL int lwip_exit_mt_state (int s , int arg )
@@ -397,7 +389,7 @@ LOCAL int lwip_exit_mt_recv(int s, int arg)
397
389
398
390
LOCAL int lwip_exit_mt_shutdown (int s , int arg )
399
391
{
400
- SOCK_MT_SET_SHUTDOWN (s , SOCK_MT_STATE_NONE );
392
+ // SOCK_MT_SET_SHUTDOWN(s, SOCK_MT_STATE_NONE);
401
393
return 0 ;
402
394
}
403
395
0 commit comments