mirror of
https://github.com/NixOS/nix
synced 2024-09-19 10:50:24 -04:00
Make SQLite busy back-off logic portable
Use C++ standard library not Unix functions for sleeping and randomness. Suggested by @edolstra in https://github.com/NixOS/nix/pull/8901#discussion_r1550416615
This commit is contained in:
parent
12ec3154b8
commit
1577b5fa67
|
@ -7,6 +7,7 @@
|
|||
#include <sqlite3.h>
|
||||
|
||||
#include <atomic>
|
||||
#include <thread>
|
||||
|
||||
namespace nix {
|
||||
|
||||
|
@ -256,10 +257,8 @@ void handleSQLiteBusy(const SQLiteBusy & e, time_t & nextWarning)
|
|||
/* Sleep for a while since retrying the transaction right away
|
||||
is likely to fail again. */
|
||||
checkInterrupt();
|
||||
struct timespec t;
|
||||
t.tv_sec = 0;
|
||||
t.tv_nsec = (random() % 100) * 1000 * 1000; /* <= 0.1s */
|
||||
nanosleep(&t, 0);
|
||||
/* <= 0.1s */
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds { rand() % 100 });
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue