Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 587954 | Differences between
and this patch

Collapse All | Expand All

(-)file_not_specified_in_diff (-238 / +31 lines)
Line  Link Here
0
-- vlc-2.2.3.orig/include/vlc_atomic.h
0
++ vlc-2.2.3/include/vlc_atomic.h
Lines 26-38 Link Here
26
 * Atomic operations do not require locking, but they are not very powerful.
26
 * Atomic operations do not require locking, but they are not very powerful.
27
 */
27
 */
28
28
29
# if !defined (__cplusplus) && (__STDC_VERSION__ >= 201112L) \
29
/* Clang older versions support atomics but lacks the stdatomic.h header */
30
  && !defined (__STDC_NO_ATOMICS__)
30
#if defined(__clang__)
31
# if !defined(__has_include) || !__has_include(<stdatomic.h>)
32
#  define __STDC_NO_ATOMICS__ 1
33
# endif
34
#endif
31
35
36
# if !defined(__cplusplus) || !defined (__STDC_NO_ATOMICS__)
37
#  if (__STDC_VERSION__ >= 201112L)
32
/*** Native C11 atomics ***/
38
/*** Native C11 atomics ***/
33
#  include <stdatomic.h>
39
#   include <stdatomic.h>
34
40
35
# else
41
#  else
42
/*** Intel/GCC atomics ***/
36
43
37
#  define ATOMIC_FLAG_INIT false
44
#  define ATOMIC_FLAG_INIT false
38
45
Lines 53-74 Link Here
53
#  define atomic_is_lock_free(obj) \
60
#  define atomic_is_lock_free(obj) \
54
    false
61
    false
55
62
56
/* In principles, __sync_*() only supports int, long and long long and their
57
 * unsigned equivalents, i.e. 4-bytes and 8-bytes types, although GCC also
58
 * supports 1 and 2-bytes types. Some non-x86 architectures do not support
59
 * 8-byte atomic types (or not efficiently). */
60
#  if defined (_MSC_VER)
61
/* Some atomic operations of the Interlocked API are only
62
   available for desktop apps. Thus we define the atomic types to
63
   be at least 32 bits wide. */
64
typedef      int_least32_t atomic_flag;
65
typedef      int_least32_t atomic_bool;
66
typedef      int_least32_t atomic_char;
67
typedef      int_least32_t atomic_schar;
68
typedef     uint_least32_t atomic_uchar;
69
typedef      int_least32_t atomic_short;
70
typedef     uint_least32_t atomic_ushort;
71
#  else
72
typedef          bool      atomic_flag;
63
typedef          bool      atomic_flag;
73
typedef          bool      atomic_bool;
64
typedef          bool      atomic_bool;
74
typedef          char      atomic_char;
65
typedef          char      atomic_char;
Lines 76-82 typedef signed char atomic_schar; Link Here
76
typedef unsigned char      atomic_uchar;
67
typedef unsigned char      atomic_uchar;
77
typedef          short     atomic_short;
68
typedef          short     atomic_short;
78
typedef unsigned short     atomic_ushort;
69
typedef unsigned short     atomic_ushort;
79
#  endif
80
typedef          int       atomic_int;
70
typedef          int       atomic_int;
81
typedef unsigned int       atomic_uint;
71
typedef unsigned int       atomic_uint;
82
typedef          long      atomic_long;
72
typedef          long      atomic_long;
Lines 109-118 typedef ptrdiff_t atomic_ptrdiff Link Here
109
typedef          intmax_t atomic_intmax_t;
99
typedef          intmax_t atomic_intmax_t;
110
typedef         uintmax_t atomic_uintmax_t;
100
typedef         uintmax_t atomic_uintmax_t;
111
101
112
# if defined (__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) || (defined (__clang__) && (defined (__x86_64__) || defined (__i386__)))
113
114
/*** Intel/GCC atomics ***/
115
116
#  define atomic_store(object,desired) \
102
#  define atomic_store(object,desired) \
117
    do { \
103
    do { \
118
        *(object) = (desired); \
104
        *(object) = (desired); \
Lines 203-406 typedef uintmax_t atomic_uintmax Link Here
203
#  define atomic_flag_clear_explicit(object,order) \
189
#  define atomic_flag_clear_explicit(object,order) \
204
    atomic_flag_clear(object)
190
    atomic_flag_clear(object)
205
191
206
# elif defined (__GNUC__)
192
# endif /* !C11 */
207
208
/*** No atomics ***/
209
210
#  define atomic_store(object,desired) \
211
    do { \
212
        typeof (object) _obj = (object); \
213
        typeof (*object) _des = (desired); \
214
        vlc_global_lock(VLC_ATOMIC_MUTEX); \
215
        *_obj = _des; \
216
        vlc_global_unlock(VLC_ATOMIC_MUTEX); \
217
    } while (0)
218
#  define atomic_store_explicit(object,desired,order) \
219
    atomic_store(object,desired)
220
221
#  define atomic_load(object) \
222
({ \
223
    typeof (object) _obj = (object); \
224
    typeof (*object) _old; \
225
    vlc_global_lock(VLC_ATOMIC_MUTEX); \
226
    _old = *_obj; \
227
    vlc_global_unlock(VLC_ATOMIC_MUTEX); \
228
    _old; \
229
})
230
#  define atomic_load_explicit(object,order) \
231
    atomic_load(object)
232
233
#  define atomic_exchange(object,desired) \
234
({ \
235
    typeof (object) _obj = (object); \
236
    typeof (*object) _des = (desired); \
237
    typeof (*object) _old; \
238
    vlc_global_lock(VLC_ATOMIC_MUTEX); \
239
    _old = *_obj; \
240
    *_obj = _des; \
241
    vlc_global_unlock(VLC_ATOMIC_MUTEX); \
242
    _old; \
243
})
244
#  define atomic_exchange_explicit(object,desired,order) \
245
    atomic_exchange(object,desired)
246
247
#  define atomic_compare_exchange_strong(object,expected,desired) \
248
({ \
249
    typeof (object) _obj = (object); \
250
    typeof (object) _exp = (expected); \
251
    typeof (*object) _des = (desired); \
252
    bool ret; \
253
    vlc_global_lock(VLC_ATOMIC_MUTEX); \
254
    ret = *_obj == *_exp; \
255
    if (ret) \
256
        *_obj = _des; \
257
    else \
258
        *_exp = *_obj; \
259
    vlc_global_unlock(VLC_ATOMIC_MUTEX); \
260
    ret; \
261
})
262
#  define atomic_compare_exchange_strong_explicit(object,expected,desired,order) \
263
    atomic_compare_exchange_strong(object, expected, desired)
264
#  define atomic_compare_exchange_weak(object,expected,desired) \
265
    atomic_compare_exchange_strong(object, expected, desired)
266
#  define atomic_compare_exchange_weak_explicit(object,expected,desired,order) \
267
    atomic_compare_exchange_weak(object, expected, desired)
268
269
#  define atomic_fetch_OP(object,desired,op) \
270
({ \
271
    typeof (object) _obj = (object); \
272
    typeof (*object) _des = (desired); \
273
    typeof (*object) _old; \
274
    vlc_global_lock(VLC_ATOMIC_MUTEX); \
275
    _old = *_obj; \
276
    *_obj = (*_obj) op (_des); \
277
    vlc_global_unlock(VLC_ATOMIC_MUTEX); \
278
    _old; \
279
})
280
281
#  define atomic_fetch_add(object,operand) \
282
    atomic_fetch_OP(object,operand,+)
283
#  define atomic_fetch_add_explicit(object,operand,order) \
284
    atomic_fetch_add(object,operand)
285
286
#  define atomic_fetch_sub(object,operand) \
287
    atomic_fetch_OP(object,operand,-)
288
#  define atomic_fetch_sub_explicit(object,operand,order) \
289
    atomic_fetch_sub(object,operand)
290
291
#  define atomic_fetch_or(object,operand) \
292
    atomic_fetch_OP(object,operand,|)
293
#  define atomic_fetch_or_explicit(object,operand,order) \
294
    atomic_fetch_or(object,operand)
295
296
#  define atomic_fetch_xor(object,operand) \
297
    atomic_fetch_OP(object,operand,^)
298
#  define atomic_fetch_xor_explicit(object,operand,order) \
299
    atomic_fetch_sub(object,operand)
300
301
#  define atomic_fetch_and(object,operand) \
302
    atomic_fetch_OP(object,operand,&)
303
#  define atomic_fetch_and_explicit(object,operand,order) \
304
    atomic_fetch_and(object,operand)
305
306
#  define atomic_flag_test_and_set(object) \
307
    atomic_exchange(object, true)
308
309
#  define atomic_flag_test_and_set_explicit(object,order) \
310
    atomic_flag_test_and_set(object)
311
312
#  define atomic_flag_clear(object) \
313
    atomic_store(object, false)
314
315
#  define atomic_flag_clear_explicit(object,order) \
316
    atomic_flag_clear(object)
317
318
# elif defined (_MSC_VER)
319
320
# include <windows.h>
321
322
/*** Use the Interlocked API. ***/
323
324
/* Define macros in order to dispatch to the correct function depending on the type.
325
   Several ranges are need because some operations are not implemented for all types. */
326
#  define atomic_type_dispatch_32_64(operation, object, ...) \
327
    (sizeof(*object) == 4 ? operation((LONG *)object, __VA_ARGS__) : \
328
    sizeof(*object) == 8 ? operation##64((LONGLONG *)object, __VA_ARGS__) : \
329
    (abort(), 0))
330
331
#  define atomic_type_dispatch_16_64(operation, object, ...) \
332
    (sizeof(*object) == 2 ? operation##16((short *)object, __VA_ARGS__) : \
333
    atomic_type_dispatch_32_64(operation, object, __VA_ARGS__))
334
335
#  define atomic_type_dispatch_8_64(operation, object, ...) \
336
    (sizeof(*object) == 1 ? operation##8((char *)object, __VA_ARGS__) : \
337
    atomic_type_dispatch_16_64(operation, object, __VA_ARGS__))
338
339
#  define atomic_store(object,desired) \
340
    atomic_type_dispatch_16_64(InterlockedExchange, object, desired)
341
#  define atomic_store_explicit(object,desired,order) \
342
    atomic_store(object, desired)
343
344
#  define atomic_load(object) \
345
    atomic_type_dispatch_16_64(InterlockedCompareExchange, object, 0, 0)
346
#  define atomic_load_explicit(object,order) \
347
    atomic_load(object)
348
349
#  define atomic_exchange(object,desired) \
350
    atomic_type_dispatch_16_64(InterlockedExchange, object, desired)
351
#  define atomic_exchange_explicit(object,desired,order) \
352
    atomic_exchange(object, desired)
353
354
#  define atomic_compare_exchange_strong(object,expected,desired) \
355
    atomic_type_dispatch_16_64(InterlockedCompareExchange, object, *expected, desired) == *expected
356
#  define atomic_compare_exchange_strong_explicit(object,expected,desired,order) \
357
    atomic_compare_exchange_strong(object, expected, desired)
358
#  define atomic_compare_exchange_weak(object,expected,desired) \
359
    atomic_compare_exchange_strong(object, expected, desired)
360
#  define atomic_compare_exchange_weak_explicit(object,expected,desired,order) \
361
    atomic_compare_exchange_weak(object, expected, desired)
362
363
#  define atomic_fetch_add(object,operand) \
364
    atomic_type_dispatch_32_64(InterlockedExchangeAdd, object, operand)
365
#  define atomic_fetch_add_explicit(object,operand,order) \
366
    atomic_fetch_add(object, operand)
367
368
#  define atomic_fetch_sub(object,operand) \
369
    atomic_type_dispatch_32_64(InterlockedExchangeAdd, object, -(LONGLONG)operand)
370
#  define atomic_fetch_sub_explicit(object,operand,order) \
371
    atomic_fetch_sub(object, operand)
372
373
#  define atomic_fetch_or(object,operand) \
374
    atomic_type_dispatch_8_64(InterlockedOr, object, operand)
375
#  define atomic_fetch_or_explicit(object,operand,order) \
376
    atomic_fetch_or(object, operand)
377
378
#  define atomic_fetch_xor(object,operand) \
379
    atomic_type_dispatch_8_64(InterlockedXor, object, operand)
380
#  define atomic_fetch_xor_explicit(object,operand,order) \
381
    atomic_fetch_sub(object, operand)
382
383
#  define atomic_fetch_and(object,operand) \
384
    atomic_type_dispatch_8_64(InterlockedAnd, object, operand)
385
#  define atomic_fetch_and_explicit(object,operand,order) \
386
    atomic_fetch_and(object, operand)
387
388
#  define atomic_flag_test_and_set(object) \
389
    atomic_exchange(object, true)
390
391
#  define atomic_flag_test_and_set_explicit(object,order) \
392
    atomic_flag_test_and_set(object)
393
394
#  define atomic_flag_clear(object) \
395
    atomic_store(object, false)
396
397
#  define atomic_flag_clear_explicit(object,order) \
398
    atomic_flag_clear(object)
399
400
# else
401
#  error FIXME: implement atomic operations for this compiler.
402
# endif
403
# endif
404
193
405
typedef atomic_uint_least32_t vlc_atomic_float;
194
typedef atomic_uint_least32_t vlc_atomic_float;
406
195
Lines 427-430 static inline void vlc_atomic_store_floa Link Here
427
    atomic_store(atom, u.i);
216
    atomic_store(atom, u.i);
428
}
217
}
429
218
219
# else /* C++ */
220
/*** Native C++11 atomics ***/
221
#   include <atomic>
222
# endif /* C++ */
223
430
#endif
224
#endif
431
-- vlc-2.2.3.orig/include/vlc_spu.h
225
++ vlc-2.2.3/include/vlc_spu.h
Lines 45-53 extern "C" { Link Here
45
45
46
typedef struct spu_private_t spu_private_t;
46
typedef struct spu_private_t spu_private_t;
47
47
48
/* Default subpicture channel ID */
49
#define SPU_DEFAULT_CHANNEL (1)
50
51
/**
48
/**
52
 * Subpicture unit descriptor
49
 * Subpicture unit descriptor
53
 */
50
 */
54
-- vlc-2.2.3.orig/include/vlc_vout_osd.h
51
++ vlc-2.2.3/include/vlc_vout_osd.h
Lines 26-37 Link Here
26
#ifndef VLC_VOUT_OSD_H
26
#ifndef VLC_VOUT_OSD_H
27
#define VLC_VOUT_OSD_H 1
27
#define VLC_VOUT_OSD_H 1
28
28
29
#include <vlc_spu.h>
30
31
#ifdef __cplusplus
29
#ifdef __cplusplus
32
extern "C" {
30
extern "C" {
33
#endif
31
#endif
34
32
33
//* Default subpicture channel ID */
34
#define SPU_DEFAULT_CHANNEL (1)
35
35
/**
36
/**
36
 * OSD menu position and picture type defines
37
 * OSD menu position and picture type defines
37
 */
38
 */
38
-- vlc-2.2.3.orig/src/video_output/video_output.c
39
++ vlc-2.2.3/src/video_output/video_output.c
Lines 43-48 Link Here
43
#include <vlc_vout.h>
43
#include <vlc_vout.h>
44
44
45
#include <vlc_filter.h>
45
#include <vlc_filter.h>
46
#include <vlc_spu.h>
46
#include <vlc_vout_osd.h>
47
#include <vlc_vout_osd.h>
47
#include <vlc_image.h>
48
#include <vlc_image.h>
48
49
49
-- vlc-2.2.3.orig/modules/gui/qt4/dialogs/messages.hpp
50
++ vlc-2.2.3/modules/gui/qt4/dialogs/messages.hpp
Lines 28-35 Link Here
28
#include "util/singleton.hpp"
28
#include "util/singleton.hpp"
29
#include "ui/messages_panel.h"
29
#include "ui/messages_panel.h"
30
#include <stdarg.h>
30
#include <stdarg.h>
31
#include <vlc_atomic.h>
32
#include <QMutex>
31
#include <QMutex>
32
#include <QAtomicInt>
33
33
34
class QTabWidget;
34
class QTabWidget;
35
class QPushButton;
35
class QPushButton;
Lines 55-61 private: Link Here
55
    void sinkMessage( const MsgEvent * );
55
    void sinkMessage( const MsgEvent * );
56
    bool matchFilter( const QString& );
56
    bool matchFilter( const QString& );
57
57
58
    atomic_uint verbosity;
58
    QAtomicInt verbosity;
59
    static void MsgCallback( void *, int, const vlc_log_t *, const char *,
59
    static void MsgCallback( void *, int, const vlc_log_t *, const char *,
60
                             va_list );
60
                             va_list );
61
61
62
-- vlc-2.2.3.orig/modules/gui/qt4/dialogs/messages.cpp
62
++ vlc-2.2.3/modules/gui/qt4/dialogs/messages.cpp
Lines 143-149 MessagesDialog::~MessagesDialog() Link Here
143
143
144
void MessagesDialog::changeVerbosity( int i_verbosity )
144
void MessagesDialog::changeVerbosity( int i_verbosity )
145
{
145
{
146
    atomic_store( &this->verbosity, i_verbosity );
146
    verbosity = i_verbosity;
147
}
147
}
148
148
149
void MessagesDialog::updateConfig()
149
void MessagesDialog::updateConfig()
Lines 337-343 void MessagesDialog::MsgCallback( void * Link Here
337
{
337
{
338
    MessagesDialog *dialog = (MessagesDialog *)self;
338
    MessagesDialog *dialog = (MessagesDialog *)self;
339
    char *str;
339
    char *str;
340
    int verbosity = atomic_load( &dialog->verbosity );
340
    int verbosity = dialog->verbosity;
341
341
342
    if( verbosity < 0 || verbosity < (type - VLC_MSG_ERR)
342
    if( verbosity < 0 || verbosity < (type - VLC_MSG_ERR)
343
     || unlikely(vasprintf( &str, format, ap ) == -1) )
343
     || unlikely(vasprintf( &str, format, ap ) == -1) )

Return to bug 587954