[pulseaudio-discuss] [PATCH 2/6] core: PA_PAGE_SIZE using sysconf() may return a negative number

Peter Meerwald-Stadler pmeerw at pmeerw.net
Thu Aug 18 16:17:07 UTC 2016


instead of calling sysconf() directly, add function pa_page_size()
which uses the guestimate 4096 in case sysconf(_SC_PAGE_SIZE) fails

using PA_ONCE to only evaluate sysconf() once

the name macro.h/.c is a bit unfortunate when adding functions

CID 1137925, CID 1137926, CID 1138485
---
 src/Makefile.am       |  2 +-
 src/pulsecore/macro.c | 39 +++++++++++++++++++++++++++++++++++++++
 src/pulsecore/macro.h |  3 ++-
 3 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 src/pulsecore/macro.c

diff --git a/src/Makefile.am b/src/Makefile.am
index 7b19497..13c5375 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -692,7 +692,7 @@ libpulsecommon_ at PA_MAJORMINOR@_la_SOURCES = \
 		pulsecore/lock-autospawn.c pulsecore/lock-autospawn.h \
 		pulsecore/log.c pulsecore/log.h \
 		pulsecore/ratelimit.c pulsecore/ratelimit.h \
-		pulsecore/macro.h \
+		pulsecore/macro.c pulsecore/macro.h \
 		pulsecore/mcalign.c pulsecore/mcalign.h \
 		pulsecore/memblock.c pulsecore/memblock.h \
 		pulsecore/memblockq.c pulsecore/memblockq.h \
diff --git a/src/pulsecore/macro.c b/src/pulsecore/macro.c
new file mode 100644
index 0000000..70cadf1
--- /dev/null
+++ b/src/pulsecore/macro.c
@@ -0,0 +1,39 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2016 Peter Meerwald-Stadler
+
+  PulseAudio 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.
+
+  PulseAudio 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 PulseAudio; if not, see <http://www.gnu.org/licenses/>.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulsecore/once.h>
+#include "macro.h"
+
+#if defined(HAVE_SYSCONF)
+size_t pa_page_size(void) {
+    static size_t page_size = 4096; /* Let's hope it's like x86. */
+
+    PA_ONCE_BEGIN {
+        long ret = sysconf(_SC_PAGE_SIZE);
+        if (ret > 0)
+            page_size = ret;
+    } PA_ONCE_END;
+
+    return page_size;
+}
+#endif
diff --git a/src/pulsecore/macro.h b/src/pulsecore/macro.h
index f80b43c..3871180 100644
--- a/src/pulsecore/macro.h
+++ b/src/pulsecore/macro.h
@@ -49,7 +49,8 @@
 #elif defined(PAGESIZE)
 #define PA_PAGE_SIZE ((size_t) PAGESIZE)
 #elif defined(HAVE_SYSCONF)
-#define PA_PAGE_SIZE ((size_t) (sysconf(_SC_PAGE_SIZE)))
+size_t pa_page_size(void);
+#define PA_PAGE_SIZE (pa_page_size())
 #else
 /* Let's hope it's like x86. */
 #define PA_PAGE_SIZE ((size_t) 4096)
-- 
2.7.4



More information about the pulseaudio-discuss mailing list