mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
random.c: fix handle to release
* random.c (fill_random_bytes): release the handle in the static variable, not a local variable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
56081d8a60
commit
5e132260c4
2 changed files with 7 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
Thu Mar 19 10:31:00 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* random.c (fill_random_bytes): release the handle in the static
|
||||
variable, not a local variable.
|
||||
|
||||
Thu Mar 19 06:30:35 2015 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* object.c (rb_obj_clone): do not touch age (FL_PROMOTED[01]) because
|
||||
|
|
4
random.c
4
random.c
|
@ -485,13 +485,13 @@ fill_random_bytes(void *seed, size_t size)
|
|||
if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
|
||||
prov = (HCRYPTPROV)INVALID_HANDLE_VALUE;
|
||||
}
|
||||
old_prov = (HCRYPTPROV)ATOMIC_SIZE_CAS(perm_prov, 0, prov);
|
||||
old_prov = (HCRYPTPROV)ATOMIC_PTR_CAS(perm_prov, 0, prov);
|
||||
if (prov == (HCRYPTPROV)INVALID_HANDLE_VALUE) {
|
||||
if (old_prov) prov = old_prov;
|
||||
}
|
||||
else {
|
||||
if (!old_prov) {
|
||||
rb_gc_register_mark_object(Data_Wrap_Struct(0, 0, release_crypt, &prov));
|
||||
rb_gc_register_mark_object(Data_Wrap_Struct(0, 0, release_crypt, &perm_prov));
|
||||
}
|
||||
else {
|
||||
CryptReleaseContext(prov, 0);
|
||||
|
|
Loading…
Reference in a new issue