@@ -31,6 +31,7 @@ rt_data_queue_init(struct rt_data_queue *queue,
3131
3232 queue -> size = size ;
3333 queue -> lwm = lwm ;
34+ queue -> is_init = RT_TRUE ;
3435
3536 queue -> get_index = 0 ;
3637 queue -> put_index = 0 ;
@@ -57,6 +58,11 @@ rt_err_t rt_data_queue_push(struct rt_data_queue *queue,
5758 rt_thread_t thread ;
5859 rt_err_t result ;
5960
61+ if (queue -> is_init != RT_TRUE )
62+ {
63+ return RT_ERROR ;
64+ }
65+
6066 RT_ASSERT (queue != RT_NULL );
6167
6268 result = RT_EOK ;
@@ -145,6 +151,11 @@ rt_err_t rt_data_queue_pop(struct rt_data_queue *queue,
145151 rt_ubase_t level ;
146152 rt_thread_t thread ;
147153 rt_err_t result ;
154+
155+ if (queue -> is_init != RT_TRUE )
156+ {
157+ return RT_ERROR ;
158+ }
148159
149160 RT_ASSERT (queue != RT_NULL );
150161 RT_ASSERT (data_ptr != RT_NULL );
@@ -244,6 +255,11 @@ rt_err_t rt_data_queue_peak(struct rt_data_queue *queue,
244255 rt_size_t * size )
245256{
246257 rt_ubase_t level ;
258+
259+ if (queue -> is_init != RT_TRUE )
260+ {
261+ return RT_ERROR ;
262+ }
247263
248264 RT_ASSERT (queue != RT_NULL );
249265
@@ -269,6 +285,11 @@ void rt_data_queue_reset(struct rt_data_queue *queue)
269285{
270286 struct rt_thread * thread ;
271287 register rt_ubase_t temp ;
288+
289+ if (queue -> is_init != RT_TRUE )
290+ {
291+ return ;
292+ }
272293
273294 rt_enter_critical ();
274295 /* wakeup all suspend threads */
@@ -325,3 +346,28 @@ void rt_data_queue_reset(struct rt_data_queue *queue)
325346 rt_schedule ();
326347}
327348RTM_EXPORT (rt_data_queue_reset );
349+
350+ rt_err_t rt_data_queue_deinit (struct rt_data_queue * queue )
351+ {
352+ rt_ubase_t level ;
353+
354+ if (queue -> is_init != RT_TRUE )
355+ {
356+ return RT_ERROR ;
357+ }
358+
359+ RT_ASSERT (queue != RT_NULL );
360+
361+ level = rt_hw_interrupt_disable ();
362+
363+ /* wakeup all suspend threads */
364+ rt_data_queue_reset (queue );
365+
366+ queue -> is_init = RT_FALSE ;
367+ rt_free (queue -> queue );
368+
369+ rt_hw_interrupt_enable (level );
370+
371+ return RT_EOK ;
372+ }
373+ RTM_EXPORT (rt_data_queue_deinit );
0 commit comments