[FFmpeg-devel,7/7] avutil/mem: Assert that the FPU state is clean before calling libc *alloc() / free()

Submitted by Michael Niedermayer on Oct. 21, 2016, 1:31 p.m.

Details

Message ID 20161021133146.11956-7-michael@niedermayer.cc
State New
Headers show

Commit Message

Michael Niedermayer Oct. 21, 2016, 1:31 p.m.
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavutil/mem.c          | 7 +++++++
 libavutil/mem_internal.h | 2 ++
 2 files changed, 9 insertions(+)

Patch hide | download patch | download mbox

diff --git a/libavutil/mem.c b/libavutil/mem.c
index 1a8fc21..0771fa3 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -81,6 +81,8 @@  void *av_malloc(size_t size)
     long diff;
 #endif
 
+    av_assert2_fpu();
+
     /* let's disallow possibly ambiguous cases */
     if (size > (max_alloc_size - 32))
         return NULL;
@@ -148,6 +150,8 @@  void *av_realloc(void *ptr, size_t size)
     int diff;
 #endif
 
+    av_assert2_fpu();
+
     /* let's disallow possibly ambiguous cases */
     if (size > (max_alloc_size - 32))
         return NULL;
@@ -227,6 +231,7 @@  int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
 
 void av_free(void *ptr)
 {
+    av_assert2_fpu();
 #if CONFIG_MEMALIGN_HACK
     if (ptr) {
         int v= ((char *)ptr)[-1];
@@ -479,6 +484,8 @@  void av_memcpy_backptr(uint8_t *dst, int back, int cnt)
 
 void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size)
 {
+    av_assert2_fpu();
+
     if (min_size < *size)
         return ptr;
 
diff --git a/libavutil/mem_internal.h b/libavutil/mem_internal.h
index 6fdbcb0..b74febc 100644
--- a/libavutil/mem_internal.h
+++ b/libavutil/mem_internal.h
@@ -28,6 +28,8 @@  static inline int ff_fast_malloc(void *ptr, unsigned int *size, size_t min_size,
 {
     void *val;
 
+    av_assert2_fpu();
+
     memcpy(&val, ptr, sizeof(val));
     if (min_size <= *size) {
         av_assert0(val || !min_size);