]> git.sur5r.net Git - freertos/commitdiff
Fix potential memory leak in the Win32 FreeRTOS+TCP network interface initialisation...
authorrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 17 Apr 2019 17:16:04 +0000 (17:16 +0000)
committerrtel <rtel@1d2547de-c912-0410-9cb9-b8ca96c0e9e2>
Wed, 17 Apr 2019 17:16:04 +0000 (17:16 +0000)
Introduce portMEMORY_BARRIER() macro to assist with memory access ordering when suspending the scheduler if link time optimization is used.

git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@2649 1d2547de-c912-0410-9cb9-b8ca96c0e9e2

FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/portable/NetworkInterface/WinPCap/NetworkInterface.c
FreeRTOS/Source/include/FreeRTOS.h
FreeRTOS/Source/portable/GCC/RISC-V/portASM.S
FreeRTOS/Source/portable/GCC/RISC-V/portmacro.h
FreeRTOS/Source/tasks.c

index e8d12a6a7d0a08f6e387521ea1332fa15274e6b3..78b3bdf8053e7612064308dc57c32b0cb5c48a1f 100644 (file)
@@ -389,6 +389,8 @@ uint32_t ulNetMask;
                {\r
                        printf( "\nAn error occurred setting the packet filter.\n" );\r
                }\r
+\r
+               pcap_freecode( &xFilterCode );\r
        }\r
 \r
        /* Create the buffers used to pass packets between the FreeRTOS simulator\r
index 7ae6219933a1d6384d307de00b31be67292c416d..e6b62d5a0d95968c8f702afd18320ecdc104d545 100644 (file)
@@ -241,6 +241,10 @@ extern "C" {
        #define configASSERT_DEFINED 1\r
 #endif\r
 \r
+#ifndef portMEMORY_BARRIER\r
+       #define portMEMORY_BARRIER()\r
+#endif\r
+\r
 /* The timers module relies on xTaskGetSchedulerState(). */\r
 #if configUSE_TIMERS == 1\r
 \r
index 0adde585d176d4875e794fa0a09fac03d739cb20..68b6fa60706ccac48e1a4e3297f399cb819c98d9 100644 (file)
  * 1 tab == 4 spaces!\r
  */\r
 \r
-#if __riscv_xlen == 64\r
-       #error Not implemented yet - change lw to ld, and sw to sd.\r
-       #define portWORD_SIZE 8\r
-       #define store_x sd\r
-       #define load_x ld\r
-#elif __riscv_xlen == 32\r
-       #define portWORD_SIZE 4\r
-       #define store_x sw\r
-       #define load_x lw\r
-#else\r
-       #error Assembler did not define __riscv_xlen\r
-#endif\r
-\r
 /*\r
  * The FreeRTOS kernel's RISC-V port is split between the the code that is\r
  * common across all currently supported RISC-V chips (implementations of the\r
  * registers.\r
  *\r
  */\r
+#if __riscv_xlen == 64\r
+    #define portWORD_SIZE 8\r
+    #define store_x sd\r
+    #define load_x ld\r
+#elif __riscv_xlen == 32\r
+    #define store_x sw\r
+    #define load_x lw\r
+    #define portWORD_SIZE 4\r
+#else\r
+    #error Assembler did not define __riscv_xlen\r
+#endif\r
+\r
 #include "freertos_risc_v_chip_specific_extensions.h"\r
 \r
 /* Check the freertos_risc_v_chip_specific_extensions.h and/or command line\r
index 670e62f2ea3794f509eed52daf1067dec5e6ddba..c43cd92e17ae501678a05e8d7cf411885b410485 100644 (file)
@@ -44,14 +44,25 @@ extern "C" {
  */\r
 \r
 /* Type definitions. */\r
-#define portSTACK_TYPE uint32_t\r
-#define portBASE_TYPE  long\r
+#if __riscv_xlen == 64\r
+       #define portSTACK_TYPE  uint64_t\r
+       #define portBASE_TYPE   int64_t\r
+       #define portUBASE_TYPE  uint64_t\r
+       #define portMAX_DELAY ( TickType_t ) 0xffffffffffffffffUL\r
+#elif __riscv_xlen == 32\r
+       #define portSTACK_TYPE  uint32_t\r
+       #define portBASE_TYPE   int32_t\r
+       #define portUBASE_TYPE  uint32_t\r
+       #define portMAX_DELAY ( TickType_t ) 0xffffffffUL\r
+#else\r
+       #error Assembler did not define __riscv_xlen\r
+#endif\r
+\r
 \r
 typedef portSTACK_TYPE StackType_t;\r
-typedef long BaseType_t;\r
-typedef unsigned long UBaseType_t;\r
-typedef uint32_t TickType_t;\r
-#define portMAX_DELAY ( TickType_t ) 0xffffffffUL\r
+typedef portBASE_TYPE BaseType_t;\r
+typedef portUBASE_TYPE UBaseType_t;\r
+typedef portUBASE_TYPE TickType_t;\r
 \r
 /* 32-bit tick type on a 32-bit architecture, so reads of the tick count do\r
 not need to be guarded with a critical section. */\r
index 492bf874e764f5f25f0d2049c0e955cf7771353d..13aaf135c04f32433086f929bfc21490591ce250 100644 (file)
@@ -2104,6 +2104,7 @@ void vTaskSuspendAll( void )
        post in the FreeRTOS support forum before reporting this as a bug! -\r
        http://goo.gl/wu4acr */\r
        ++uxSchedulerSuspended;\r
+       portMEMORY_BARRIER();\r
 }\r
 /*----------------------------------------------------------*/\r
 \r