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>
|
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
|
* 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)) {
|
if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
|
||||||
prov = (HCRYPTPROV)INVALID_HANDLE_VALUE;
|
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 (prov == (HCRYPTPROV)INVALID_HANDLE_VALUE) {
|
||||||
if (old_prov) prov = old_prov;
|
if (old_prov) prov = old_prov;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (!old_prov) {
|
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 {
|
else {
|
||||||
CryptReleaseContext(prov, 0);
|
CryptReleaseContext(prov, 0);
|
||||||
|
|
Loading…
Add table
Reference in a new issue