fixes #2796 (#10500) [backport]

This commit is contained in:
Miran 2019-01-30 17:31:06 +01:00 • committed by Andreas Rumpf
commit 9ac0cbdd51

View file

@ -60,23 +60,21 @@ proc `$`*(oid: Oid): string =
result = newString(24) result = newString(24)
oidToString(oid, result) oidToString(oid, result)
proc rand(): cint {.importc: "rand", header: "<stdlib.h>", nodecl.}
proc srand(seed: cint) {.importc: "srand", header: "<stdlib.h>", nodecl.}
var t = getTime().toUnix.int32
srand(t)
var var
incr: int incr: int = rand()
fuzz: int32 fuzz: int32 = rand()
proc genOid*(): Oid = proc genOid*(): Oid =
## generates a new OID. ## generates a new OID.
proc rand(): cint {.importc: "rand", header: "<stdlib.h>", nodecl.} t = getTime().toUnix.int32
proc srand(seed: cint) {.importc: "srand", header: "<stdlib.h>", nodecl.}
var t = getTime().toUnix.int32
var i = int32(atomicInc(incr)) var i = int32(atomicInc(incr))
if fuzz == 0:
# racy, but fine semantically:
srand(t)
fuzz = rand()
bigEndian32(addr result.time, addr(t)) bigEndian32(addr result.time, addr(t))
result.fuzz = fuzz result.fuzz = fuzz
bigEndian32(addr result.count, addr(i)) bigEndian32(addr result.count, addr(i))