rand.patch 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. commit 9d4379ac1a951a46959c7c02fdca2df237ef475e
  2. author: eninng
  3. date: 2022-05-12T17:48:42+03:00
  4. [libxml] Use thread_local rand_seed when rand_r is avaliable
  5. Task: SK-6086
  6. --- a/dict.c (f4373e5855353e6a2cbee8bda5d59c20f67e14c7)
  7. +++ b/dict.c (9d4379ac1a951a46959c7c02fdca2df237ef475e)
  8. @@ -142,9 +142,9 @@ static int xmlDictInitialized = 0;
  9. #ifdef DICT_RANDOMIZATION
  10. #ifdef HAVE_RAND_R
  11. /*
  12. - * Internal data for random function, protected by xmlDictMutex
  13. + * Internal data for random function
  14. */
  15. -static unsigned int rand_seed = 0;
  16. +static _Thread_local unsigned int rand_seed = 0;
  17. #endif
  18. #endif
  19. @@ -182,10 +182,7 @@ int __xmlInitializeDict(void) {
  20. xmlRMutexLock(xmlDictMutex);
  21. #ifdef DICT_RANDOMIZATION
  22. -#ifdef HAVE_RAND_R
  23. - rand_seed = time(NULL);
  24. - rand_r(& rand_seed);
  25. -#else
  26. +#ifndef HAVE_RAND_R
  27. srand(time(NULL));
  28. #endif
  29. #endif
  30. @@ -201,13 +198,15 @@ int __xmlRandom(void) {
  31. if (xmlDictInitialized == 0)
  32. __xmlInitializeDict();
  33. - xmlRMutexLock(xmlDictMutex);
  34. #ifdef HAVE_RAND_R
  35. + if (rand_seed == 0)
  36. + rand_seed = time(NULL);
  37. ret = rand_r(& rand_seed);
  38. #else
  39. + xmlRMutexLock(xmlDictMutex);
  40. ret = rand();
  41. -#endif
  42. xmlRMutexUnlock(xmlDictMutex);
  43. +#endif
  44. return(ret);
  45. }
  46. #endif