[vlc-devel] [PATCH] core: add aligned_free to match the aligned_alloc used in the code

remi at remlab.net remi at remlab.net
Tue Jun 20 13:03:02 CEST 2017


Replacing, in autoconf sense, a function that exists nowhere, makes no sense. The autoconf test is a literal complete waste.

Le 20 juin 2017 13:20:13 GMT+03:00, Steve Lhomme <robux4 at videolabs.io> a écrit :
>On Windows if you allocate aligned memory you need to free it with an
>aligned
>version of free.
>
>This is similar to the old vlc_memalign() + vlc_free()
>---
> compat/aligned_alloc.c         | 16 ++++++++++------
>compat/aligned_free.c          | 43
>++++++++++++++++++++++++++++++++++++++++++
> configure.ac                   |  2 +-
> include/vlc_fixups.h           |  3 +++
> modules/video_chroma/copy.c    |  2 +-
> modules/video_filter/gradfun.c |  2 +-
> modules/video_output/evas.c    |  2 +-
> src/misc/picture.c             |  2 +-
> src/misc/picture_pool.c        |  2 +-
> 9 files changed, 62 insertions(+), 12 deletions(-)
> create mode 100644 compat/aligned_free.c
>
>diff --git a/compat/aligned_alloc.c b/compat/aligned_alloc.c
>index 9ea352b0c5..28fad07f79 100644
>--- a/compat/aligned_alloc.c
>+++ b/compat/aligned_alloc.c
>@@ -52,14 +52,18 @@ void *aligned_alloc(size_t align, size_t size)
>     }
>     return ptr;
> 
>-#elif !defined (_WIN32)
>+#elif defined (_WIN32)
>+#ifdef __MINGW32__
>+    return __mingw_aligned_malloc(size, align);
>+#elif defined(_MSC_VER)
>+    return _aligned_malloc(size, align);
>+#endif
>+    if (size > 0)
>+        errno = ENOMEM;
>+    return NULL;
>+#else
> 
>    return memalign(align, size);
> 
>-#else
>-
>-   if (size > 0)
>-       errno = ENOMEM;
>-   return NULL;
> #endif
> }
>diff --git a/compat/aligned_free.c b/compat/aligned_free.c
>new file mode 100644
>index 0000000000..380125f20d
>--- /dev/null
>+++ b/compat/aligned_free.c
>@@ -0,0 +1,43 @@
>+/*****************************************************************************
>+ * aligned_free.c: C11 aligned_alloc() replacement counterpart
>+
>*****************************************************************************
>+ * Copyright © 2012, 2017 Steve Lhomme
>+ *
>+ * This program is free software; you can redistribute it and/or
>modify it
>+ * under the terms of the GNU Lesser General Public License as
>published by
>+ * the Free Software Foundation; either version 2.1 of the License, or
>+ * (at your option) any later version.
>+ *
>+ * This program is distributed in the hope that it will be useful,
>+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
>+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>+ * GNU Lesser General Public License for more details.
>+ *
>+ * You should have received a copy of the GNU Lesser General Public
>License
>+ * along with this program; if not, write to the Free Software
>Foundation,
>+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
>+
>*****************************************************************************/
>+
>+#ifdef HAVE_CONFIG_H
>+# include <config.h>
>+#endif
>+
>+#include <assert.h>
>+#include <stdlib.h>
>+#include <errno.h>
>+#if !defined (HAVE_POSIX_MEMALIGN) && !defined (_WIN32)
>+# include <malloc.h>
>+#endif
>+
>+void aligned_free(void *ptr)
>+{
>+#if defined (_WIN32)
>+#ifdef __MINGW32__
>+    return __mingw_aligned_free(ptr);
>+#elif defined(_MSC_VER)
>+    return _aligned_free(ptr);
>+#endif
>+#else
>+    free(ptr);
>+#endif
>+}
>diff --git a/configure.ac b/configure.ac
>index 67fc7deb1a..633dd8a034 100644
>--- a/configure.ac
>+++ b/configure.ac
>@@ -598,7 +598,7 @@ need_libc=false
> 
> dnl Check for usual libc functions
>AC_CHECK_FUNCS([daemon fcntl flock fstatvfs fork getenv getpwuid_r
>isatty lstat memalign mkostemp mmap open_memstream openat pread
>posix_fadvise posix_madvise posix_memalign setlocale stricmp strnicmp
>strptime tdestroy uselocale])
>-AC_REPLACE_FUNCS([aligned_alloc atof atoll dirfd fdopendir ffsll
>flockfile fsync getdelim getpid lldiv memrchr nrand48 poll recvmsg
>rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy strndup
>strnlen strnstr strsep strtof strtok_r strtoll swab tfind timegm
>timespec_get strverscmp pathconf])
>+AC_REPLACE_FUNCS([aligned_alloc aligned_free atof atoll dirfd
>fdopendir ffsll flockfile fsync getdelim getpid lldiv memrchr nrand48
>poll recvmsg rewind sendmsg setenv strcasecmp strcasestr strdup strlcpy
>strndup strnlen strnstr strsep strtof strtok_r strtoll swab tfind
>timegm timespec_get strverscmp pathconf])
> AC_REPLACE_FUNCS([gettimeofday])
> AC_CHECK_FUNC(fdatasync,,
>[AC_DEFINE(fdatasync, fsync, [Alias fdatasync() to fsync() if
>missing.])
>diff --git a/include/vlc_fixups.h b/include/vlc_fixups.h
>index 44b8426f2c..7037fe2f85 100644
>--- a/include/vlc_fixups.h
>+++ b/include/vlc_fixups.h
>@@ -305,6 +305,9 @@ int unsetenv (const char *);
> #ifndef HAVE_ALIGNED_ALLOC
> void *aligned_alloc(size_t, size_t);
> #endif
>+#ifndef HAVE_ALIGNED_FREE
>+void aligned_free(void*);
>+#endif
> 
> #if defined(__native_client__) && defined(__cplusplus)
> # define HAVE_USELOCALE
>diff --git a/modules/video_chroma/copy.c b/modules/video_chroma/copy.c
>index 4bc2e91c45..6c20c132b0 100644
>--- a/modules/video_chroma/copy.c
>+++ b/modules/video_chroma/copy.c
>@@ -49,7 +49,7 @@ int CopyInitCache(copy_cache_t *cache, unsigned
>width)
> void CopyCleanCache(copy_cache_t *cache)
> {
> #ifdef CAN_COMPILE_SSE2
>-    free(cache->buffer);
>+    aligned_free(cache->buffer);
>     cache->buffer = NULL;
>     cache->size   = 0;
> #else
>diff --git a/modules/video_filter/gradfun.c
>b/modules/video_filter/gradfun.c
>index 317c604f7b..8ebb95d0aa 100644
>--- a/modules/video_filter/gradfun.c
>+++ b/modules/video_filter/gradfun.c
>@@ -168,7 +168,7 @@ static void Close(vlc_object_t *object)
> 
>     var_DelCallback(filter, CFG_PREFIX "radius",   Callback, NULL);
>     var_DelCallback(filter, CFG_PREFIX "strength", Callback, NULL);
>-    free(sys->cfg.buf);
>+    aligned_free(sys->cfg.buf);
>     vlc_mutex_destroy(&sys->lock);
>     free(sys);
> }
>diff --git a/modules/video_output/evas.c b/modules/video_output/evas.c
>index 348a681de3..d31d4b7ca6 100644
>--- a/modules/video_output/evas.c
>+++ b/modules/video_output/evas.c
>@@ -951,7 +951,7 @@ EvasImageBuffersFree( vout_display_t *vd )
>     vout_display_sys_t *sys = vd->sys;
> 
>     for( unsigned int i = 0; i < sys->i_nb_buffers; i++ )
>-        free( sys->p_buffers[i].p[0] );
>+        align_free( sys->p_buffers[i].p[0] );
>     free( sys->p_buffers );
>     sys->p_buffers = NULL;
>     sys->i_nb_buffers = 0;
>diff --git a/src/misc/picture.c b/src/misc/picture.c
>index 3bac926714..7c170f0fba 100644
>--- a/src/misc/picture.c
>+++ b/src/misc/picture.c
>@@ -110,7 +110,7 @@ static void picture_DestroyFromResource( picture_t
>*p_picture )
>  */
> static void picture_Destroy( picture_t *p_picture )
> {
>-    free( p_picture->p[0].p_pixels );
>+    aligned_free( p_picture->p[0].p_pixels );
>     free( p_picture );
> }
> 
>diff --git a/src/misc/picture_pool.c b/src/misc/picture_pool.c
>index 0c5ea39822..17bf3b7b82 100644
>--- a/src/misc/picture_pool.c
>+++ b/src/misc/picture_pool.c
>@@ -58,7 +58,7 @@ static void picture_pool_Destroy(picture_pool_t
>*pool)
> 
>     vlc_cond_destroy(&pool->wait);
>     vlc_mutex_destroy(&pool->lock);
>-    free(pool);
>+    aligned_free(pool);
> }
> 
> void picture_pool_Release(picture_pool_t *pool)
>-- 
>2.12.1
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

-- 
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20170620/ce9f9e0a/attachment.html>


More information about the vlc-devel mailing list