You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2023/07/31 14:50:18 UTC

[nuttx] 02/12: malloc: set errno to ENOMEM when malloc fail

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit a551be4ee2686735f9b8f7490c0c882c902cbf6d
Author: yangyalei <ya...@xiaomi.com>
AuthorDate: Thu Jun 15 10:38:38 2023 +0800

    malloc: set errno to ENOMEM when malloc fail
    
    fix LTP case ltp_threads_pthread_cond_init_s_c error:
    "Test ltp_threads_pthread_cond_init_s_c unresolved: got 38
    (Invalid system call number) on line 236 (Memory not full)"
    
    Signed-off-by: yangyalei <ya...@xiaomi.com>
    
    ltp: fix review questions
    
    Signed-off-by: yangyalei <ya...@xiaomi.com>
---
 mm/umm_heap/umm_malloc.c   | 12 ++++++++++--
 mm/umm_heap/umm_memalign.c | 12 ++++++++++--
 mm/umm_heap/umm_realloc.c  | 12 ++++++++++--
 mm/umm_heap/umm_zalloc.c   | 12 ++++++++++--
 4 files changed, 40 insertions(+), 8 deletions(-)

diff --git a/mm/umm_heap/umm_malloc.c b/mm/umm_heap/umm_malloc.c
index 261f0d8460..97a12c2204 100644
--- a/mm/umm_heap/umm_malloc.c
+++ b/mm/umm_heap/umm_malloc.c
@@ -26,7 +26,7 @@
 
 #include <stdlib.h>
 #include <unistd.h>
-
+#include <errno.h>
 #include <nuttx/mm/mm.h>
 
 #include "umm_heap/umm_heap.h"
@@ -57,8 +57,16 @@ FAR void *malloc(size_t size)
 
   return memalign(sizeof(FAR void *), size);
 #else
+  FAR void *ret;
+
   /* Use mm_malloc() because it implements the clear */
 
-  return mm_malloc(USR_HEAP, size);
+  ret = mm_malloc(USR_HEAP, size);
+  if (!ret)
+    {
+      set_errno(ENOMEM);
+    }
+
+  return ret;
 #endif
 }
diff --git a/mm/umm_heap/umm_memalign.c b/mm/umm_heap/umm_memalign.c
index 378ce6e428..f67cfc0cff 100644
--- a/mm/umm_heap/umm_memalign.c
+++ b/mm/umm_heap/umm_memalign.c
@@ -26,7 +26,7 @@
 
 #include <stdlib.h>
 #include <unistd.h>
-
+#include <errno.h>
 #include <nuttx/mm/mm.h>
 
 #include "umm_heap/umm_heap.h"
@@ -86,6 +86,14 @@ FAR void *memalign(size_t alignment, size_t size)
 
   return mem;
 #else
-  return mm_memalign(USR_HEAP, alignment, size);
+  FAR void *ret;
+
+  ret = mm_memalign(USR_HEAP, alignment, size);
+  if (!ret)
+    {
+      set_errno(ENOMEM);
+    }
+
+  return ret;
 #endif
 }
diff --git a/mm/umm_heap/umm_realloc.c b/mm/umm_heap/umm_realloc.c
index 2db289db14..f3c221b528 100644
--- a/mm/umm_heap/umm_realloc.c
+++ b/mm/umm_heap/umm_realloc.c
@@ -26,7 +26,7 @@
 
 #include <stdlib.h>
 #include <unistd.h>
-
+#include <errno.h>
 #include <nuttx/mm/mm.h>
 
 #include "umm_heap/umm_heap.h"
@@ -88,6 +88,14 @@ FAR void *realloc(FAR void *oldmem, size_t size)
 
   return mem;
 #else
-  return mm_realloc(USR_HEAP, oldmem, size);
+  FAR void *ret;
+
+  ret = mm_realloc(USR_HEAP, oldmem, size);
+  if (!ret)
+    {
+      set_errno(ENOMEM);
+    }
+
+  return ret;
 #endif
 }
diff --git a/mm/umm_heap/umm_zalloc.c b/mm/umm_heap/umm_zalloc.c
index 82d0906ae4..0ff400d7fb 100644
--- a/mm/umm_heap/umm_zalloc.c
+++ b/mm/umm_heap/umm_zalloc.c
@@ -26,7 +26,7 @@
 
 #include <stdlib.h>
 #include <string.h>
-
+#include <errno.h>
 #include <nuttx/mm/mm.h>
 
 #include "umm_heap/umm_heap.h"
@@ -63,8 +63,16 @@ FAR void *zalloc(size_t size)
 
   return mem;
 #else
+  FAR void *ret;
+
   /* Use mm_zalloc() because it implements the clear */
 
-  return mm_zalloc(USR_HEAP, size);
+  ret = mm_zalloc(USR_HEAP, size);
+  if (!ret)
+    {
+      set_errno(ENOMEM);
+    }
+
+  return ret;
 #endif
 }