kumquat-buildroot/package/vlc/0006-posix-remove-ancient-run-time-fallback-to-real-time-.patch
Bernd Kuhls 6a07591484 package/vlc: security bump version to 3.0.14
Removed patch 0002 which was applied upstream:
41caaa08cd

Renumbered remaining patches.

Release notes:
https://www.videolan.org/vlc/releases/3.0.13.html
https://www.videolan.org/vlc/releases/3.0.12-update.html

Version 3.0.13 fixes VideoLAN-SB-VLC-3013:
https://www.videolan.org/security/sb-vlc3013.html

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2021-05-13 09:45:45 +02:00

188 lines
5.5 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 5d561e1e2dcde3c9fca4d925f12447009d0d4a4c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= <remi@remlab.net>
Date: Wed, 18 Apr 2018 17:23:57 +0300
Subject: [PATCH] posix: remove ancient run-time fallback to real-time clock
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
posix: remove ancient run-time fallback to real-time clock
For hysterical raisins, GNU/Linux and possibly some other OSes still
report that monotonic clock must be checked at run-time, although I
doubt that VLC or even current glibc would run on such old kernel.
Drop that to simplify and avoid the systematic one-time init check.
Downloaded from upstream commit to fix build error on m68k:
posix/thread.c:79:5: warning: #warning Monotonic clock not available. Expect timing issues. [-Wcpp]
# warning Monotonic clock not available. Expect timing issues.
^~~~~~~
posix/thread.c: In function vlc_clock_setup_once:
posix/thread.c:88:18: error: lvalue required as left operand of assignment
vlc_clock_id = (val < 0) ? CLOCK_REALTIME : CLOCK_MONOTONIC;
Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
src/posix/thread.c | 96 +++++++-----------------------------------------------
1 file changed, 11 insertions(+), 85 deletions(-)
diff --git a/src/posix/thread.c b/src/posix/thread.c
index dab8b71f97..8878941913 100644
--- a/src/posix/thread.c
+++ b/src/posix/thread.c
@@ -51,62 +51,16 @@
# include <sys/pset.h>
#endif
-#if !defined (_POSIX_TIMERS)
-# define _POSIX_TIMERS (-1)
-#endif
-#if !defined (_POSIX_CLOCK_SELECTION)
-/* Clock selection was defined in 2001 and became mandatory in 2008. */
-# define _POSIX_CLOCK_SELECTION (-1)
-#endif
-#if !defined (_POSIX_MONOTONIC_CLOCK)
-# define _POSIX_MONOTONIC_CLOCK (-1)
-#endif
-
-#if (_POSIX_TIMERS > 0)
static unsigned vlc_clock_prec;
-# if (_POSIX_MONOTONIC_CLOCK > 0) && (_POSIX_CLOCK_SELECTION > 0)
-/* Compile-time POSIX monotonic clock support */
-# define vlc_clock_id (CLOCK_MONOTONIC)
-
-# elif (_POSIX_MONOTONIC_CLOCK == 0) && (_POSIX_CLOCK_SELECTION > 0)
-/* Run-time POSIX monotonic clock support (see clock_setup() below) */
-static clockid_t vlc_clock_id;
-
-# else
-/* No POSIX monotonic clock support */
-# define vlc_clock_id (CLOCK_REALTIME)
-# warning Monotonic clock not available. Expect timing issues.
-
-# endif /* _POSIX_MONOTONIC_CLOKC */
-
static void vlc_clock_setup_once (void)
{
-# if (_POSIX_MONOTONIC_CLOCK == 0)
- long val = sysconf (_SC_MONOTONIC_CLOCK);
- assert (val != 0);
- vlc_clock_id = (val < 0) ? CLOCK_REALTIME : CLOCK_MONOTONIC;
-# endif
-
struct timespec res;
- if (unlikely(clock_getres (vlc_clock_id, &res) != 0 || res.tv_sec != 0))
+ if (unlikely(clock_getres(CLOCK_MONOTONIC, &res) != 0 || res.tv_sec != 0))
abort ();
vlc_clock_prec = (res.tv_nsec + 500) / 1000;
}
-static pthread_once_t vlc_clock_once = PTHREAD_ONCE_INIT;
-
-# define vlc_clock_setup() \
- pthread_once(&vlc_clock_once, vlc_clock_setup_once)
-
-#else /* _POSIX_TIMERS */
-
-# include <sys/time.h> /* gettimeofday() */
-
-# define vlc_clock_setup() (void)0
-# warning Monotonic clock not available. Expect timing issues.
-#endif /* _POSIX_TIMERS */
-
static struct timespec mtime_to_ts (mtime_t date)
{
lldiv_t d = lldiv (date, CLOCK_FREQ);
@@ -233,14 +187,11 @@ void vlc_cond_init (vlc_cond_t *p_condvar)
{
pthread_condattr_t attr;
- if (unlikely(pthread_condattr_init (&attr)))
- abort ();
-#if (_POSIX_CLOCK_SELECTION > 0)
- vlc_clock_setup ();
- pthread_condattr_setclock (&attr, vlc_clock_id);
-#endif
- if (unlikely(pthread_cond_init (p_condvar, &attr)))
+ if (unlikely(pthread_condattr_init (&attr))
+ || unlikely(pthread_condattr_setclock(&attr, CLOCK_MONOTONIC))
+ || unlikely(pthread_cond_init (p_condvar, &attr)))
abort ();
+
pthread_condattr_destroy (&attr);
}
@@ -625,44 +576,27 @@ void vlc_control_cancel (int cmd, ...)
mtime_t mdate (void)
{
-#if (_POSIX_TIMERS > 0)
struct timespec ts;
- vlc_clock_setup ();
- if (unlikely(clock_gettime (vlc_clock_id, &ts) != 0))
+ if (unlikely(clock_gettime(CLOCK_MONOTONIC, &ts) != 0))
abort ();
return (INT64_C(1000000) * ts.tv_sec) + (ts.tv_nsec / 1000);
-
-#else
- struct timeval tv;
-
- if (unlikely(gettimeofday (&tv, NULL) != 0))
- abort ();
- return (INT64_C(1000000) * tv.tv_sec) + tv.tv_usec;
-
-#endif
}
#undef mwait
void mwait (mtime_t deadline)
{
-#if (_POSIX_CLOCK_SELECTION > 0)
- vlc_clock_setup ();
+ static pthread_once_t vlc_clock_once = PTHREAD_ONCE_INIT;
+
/* If the deadline is already elapsed, or within the clock precision,
* do not even bother the system timer. */
+ pthread_once(&vlc_clock_once, vlc_clock_setup_once);
deadline -= vlc_clock_prec;
struct timespec ts = mtime_to_ts (deadline);
- while (clock_nanosleep (vlc_clock_id, TIMER_ABSTIME, &ts, NULL) == EINTR);
-
-#else
- deadline -= mdate ();
- if (deadline > 0)
- msleep (deadline);
-
-#endif
+ while (clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &ts, NULL) == EINTR);
}
#undef msleep
@@ -670,15 +604,7 @@ void msleep (mtime_t delay)
{
struct timespec ts = mtime_to_ts (delay);
-#if (_POSIX_CLOCK_SELECTION > 0)
- vlc_clock_setup ();
- while (clock_nanosleep (vlc_clock_id, 0, &ts, &ts) == EINTR);
-
-#else
- while (nanosleep (&ts, &ts) == -1)
- assert (errno == EINTR);
-
-#endif
+ while (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, &ts) == EINTR);
}
unsigned vlc_GetCPUCount(void)
--
2.14.4