Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

54 lines
1.1 KiB

  1. #include <malloc.h>
  2. #include <windows.h>
  3. __forceinline unsigned long wait_a_bit(unsigned long WaitTime) {
  4. Sleep(WaitTime);
  5. WaitTime+=1000;
  6. if (WaitTime > 60000) // ~30 minutes total
  7. WaitTime = -1;
  8. return WaitTime;
  9. }
  10. void * __fastcall _malloc_crt(size_t cb)
  11. {
  12. unsigned long WaitTime = 0;
  13. void *pv;
  14. Retry:
  15. pv = malloc(cb);
  16. if (!pv) {
  17. WaitTime = wait_a_bit(WaitTime);
  18. if (WaitTime != -1)
  19. goto Retry;
  20. }
  21. return pv;
  22. }
  23. void * __fastcall _calloc_crt(size_t count, size_t size)
  24. {
  25. unsigned long WaitTime = 0;
  26. void *pv;
  27. Retry:
  28. pv = calloc(count, size);
  29. if (!pv) {
  30. WaitTime = wait_a_bit(WaitTime);
  31. if (WaitTime != -1)
  32. goto Retry;
  33. }
  34. return pv;
  35. }
  36. void * __fastcall _realloc_crt(void *ptr, size_t size)
  37. {
  38. unsigned long WaitTime = 0;
  39. void *pv;
  40. Retry:
  41. pv = realloc(ptr, size);
  42. if (!pv && size) {
  43. WaitTime = wait_a_bit(WaitTime);
  44. if (WaitTime != -1)
  45. goto Retry;
  46. }
  47. return pv;
  48. }