From 8d00d8b7069d5b8d1090708976334cc31849fa50 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 6 Mar 2010 12:20:41 +0200 Subject: [PATCH] playlist: randomize in a thread-safe manner --- src/playlist/sort.c | 3 ++- src/playlist/thread.c | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/playlist/sort.c b/src/playlist/sort.c index 7c8260655e..e125b0d112 100644 --- a/src/playlist/sort.c +++ b/src/playlist/sort.c @@ -27,6 +27,7 @@ #endif #include +#include #define VLC_INTERNAL_PLAYLIST_SORT_FUNCTIONS #include "vlc_playlist.h" #include "playlist_internal.h" @@ -146,7 +147,7 @@ void playlist_ItemArraySort( unsigned i_items, playlist_item_t **pp_items, for( i_position = i_items - 1; i_position > 0; i_position-- ) { - i_new = rand() % (i_position+1); + i_new = ((unsigned)vlc_mrand48()) % (i_position+1); p_temp = pp_items[i_position]; pp_items[i_position] = pp_items[i_new]; pp_items[i_new] = p_temp; diff --git a/src/playlist/thread.c b/src/playlist/thread.c index 25292e60d9..4cbd2a3d27 100644 --- a/src/playlist/thread.c +++ b/src/playlist/thread.c @@ -32,6 +32,7 @@ #include #include #include +#include #include "stream_output/stream_output.h" #include "playlist_internal.h" @@ -189,10 +190,9 @@ static void ResetCurrentlyPlaying( playlist_t *p_playlist, if( var_GetBool( p_playlist, "random" ) ) { /* Shuffle the array */ - srand( (unsigned int)mdate() ); - for( int j = p_playlist->current.i_size - 1; j > 0; j-- ) + for( unsigned j = p_playlist->current.i_size - 1; j > 0; j-- ) { - int i = rand() % (j+1); /* between 0 and j */ + unsigned i = ((unsigned)vlc_mrand48()) % (j+1); /* between 0 and j */ playlist_item_t *p_tmp; /* swap the two items */ p_tmp = ARRAY_VAL(p_playlist->current, i); -- 2.39.2