Changeset e516ddb1ca69202f576d6e7020c9f9b2c90b8890
- Timestamp:
- 07/09/08 11:09:18
(3 months ago)
- Author:
- Rémi Denis-Courmont <rdenis@simphalempin.com>
- git-committer:
- Rémi Denis-Courmont <rdenis@simphalempin.com> 1220778558 +0300
- git-parent:
[6db8a5e028fd4e7d97b95c7b945c13230f15a40b]
- git-author:
- Rémi Denis-Courmont <rdenis@simphalempin.com> 1220778558 +0300
- Message:
Rework delay checking, use it for net_Accept, add deadline checks
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r6db8a5e |
re516ddb |
|
| 81 | 81 | __attribute__((noinline)) |
|---|
| 82 | 82 | __attribute__((error("sorry, cannot sleep for such short a time"))) |
|---|
| 83 | | void impossible_msleep( mtime_t delay ) |
|---|
| | 83 | mtime_t impossible_delay( mtime_t delay ) |
|---|
| 84 | 84 | { |
|---|
| 85 | 85 | (void) delay; |
|---|
| 86 | | msleep( VLC_HARD_MIN_SLEEP ); |
|---|
| | 86 | return VLC_HARD_MIN_SLEEP; |
|---|
| 87 | 87 | } |
|---|
| 88 | 88 | |
|---|
| … | … | |
| 90 | 90 | __attribute__((unused)) |
|---|
| 91 | 91 | __attribute__((noinline)) |
|---|
| 92 | | __attribute__((warning("use proper event handling instead"))) |
|---|
| 93 | | void bad_msleep( mtime_t delay ) |
|---|
| | 92 | __attribute__((warning("use proper event handling instead of short delay"))) |
|---|
| | 93 | mtime_t harmful_delay( mtime_t delay ) |
|---|
| 94 | 94 | { |
|---|
| 95 | | msleep( delay ); |
|---|
| | 95 | return delay; |
|---|
| 96 | 96 | } |
|---|
| 97 | 97 | |
|---|
| 98 | | # define msleep( d ) \ |
|---|
| | 98 | # define check_delay( d ) \ |
|---|
| 99 | 99 | ((__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \ |
|---|
| 100 | 100 | && (d < VLC_HARD_MIN_SLEEP)) \ |
|---|
| 101 | | ? impossible_msleep(d) \ |
|---|
| | 101 | ? impossible_delay(d) \ |
|---|
| 102 | 102 | : ((__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \ |
|---|
| 103 | 103 | && (d < VLC_SOFT_MIN_SLEEP)) \ |
|---|
| 104 | | ? bad_msleep(d) \ |
|---|
| 105 | | : msleep(d))) |
|---|
| | 104 | ? harmful_delay(d) \ |
|---|
| | 105 | : d)) |
|---|
| | 106 | |
|---|
| | 107 | static |
|---|
| | 108 | __attribute__((unused)) |
|---|
| | 109 | __attribute__((noinline)) |
|---|
| | 110 | __attribute__((error("deadlines can not be constant"))) |
|---|
| | 111 | mtime_t impossible_deadline( mtime_t deadline ) |
|---|
| | 112 | { |
|---|
| | 113 | return deadline; |
|---|
| | 114 | } |
|---|
| | 115 | |
|---|
| | 116 | # define check_deadline( d ) \ |
|---|
| | 117 | (__builtin_constant_p(d) ? impossible_deadline(d) : d) |
|---|
| | 118 | #else |
|---|
| | 119 | # define check_delay(d) (d) |
|---|
| | 120 | # define check_deadline(d) (d) |
|---|
| 106 | 121 | #endif |
|---|
| | 122 | |
|---|
| | 123 | #define msleep(d) msleep(check_delay(d)) |
|---|
| | 124 | #define mwait(d) mwait(check_deadline(d)) |
|---|
| 107 | 125 | |
|---|
| 108 | 126 | /***************************************************************************** |
|---|
| rebd8003 |
re516ddb |
|
| 108 | 108 | VLC_EXPORT( int, net_AcceptSingle, (vlc_object_t *obj, int lfd) ); |
|---|
| 109 | 109 | |
|---|
| 110 | | #define net_Accept(a, b, c) __net_Accept(VLC_OBJECT(a), b, c) |
|---|
| 111 | 110 | VLC_EXPORT( int, __net_Accept, ( vlc_object_t *, int *, mtime_t ) ); |
|---|
| | 111 | #define net_Accept(a, b, c) \ |
|---|
| | 112 | __net_Accept(VLC_OBJECT(a), b, c ? check_delay(c) : 0) |
|---|
| 112 | 113 | |
|---|
| 113 | 114 | #define net_ConnectDgram(a, b, c, d, e ) __net_ConnectDgram(VLC_OBJECT(a), b, c, d, e) |
|---|
| rcd133b2 |
re516ddb |
|
| 140 | 140 | VLC_EXPORT( int, __vlc_object_timedwait, ( vlc_object_t *, mtime_t ) ); |
|---|
| 141 | 141 | #define vlc_object_timedwait( obj, d ) \ |
|---|
| 142 | | __vlc_object_timedwait( VLC_OBJECT( obj ), d ) |
|---|
| | 142 | __vlc_object_timedwait( VLC_OBJECT( obj ), check_deadline(d) ) |
|---|
| 143 | 143 | |
|---|
| 144 | 144 | VLC_EXPORT( void, __vlc_object_signal_unlocked, ( vlc_object_t * ) ); |
|---|
| r12e7640 |
re516ddb |
|
| 412 | 412 | * Returns 0 if object signaled, an error code in case of timeout or error. |
|---|
| 413 | 413 | *****************************************************************************/ |
|---|
| 414 | | #define vlc_cond_timedwait( P_COND, P_MUTEX, DEADLINE ) \ |
|---|
| 415 | | __vlc_cond_timedwait( __FILE__, __LINE__, P_COND, P_MUTEX, DEADLINE ) |
|---|
| | 414 | #define vlc_cond_timedwait( c, m, d ) \ |
|---|
| | 415 | __vlc_cond_timedwait( __FILE__, __LINE__, c, m, check_deadline(d) ) |
|---|
| 416 | 416 | |
|---|
| 417 | 417 | static inline int __vlc_cond_timedwait( const char * psz_file, int i_line, |
|---|
| r6f3e3a2 |
re516ddb |
|
| 315 | 315 | } |
|---|
| 316 | 316 | |
|---|
| | 317 | #undef mwait |
|---|
| 317 | 318 | /** |
|---|
| 318 | 319 | * Wait for a date |
|---|