BUG #13487: GetBufferFromRing code bug
От | jingwei_5107@qq.com |
---|---|
Тема | BUG #13487: GetBufferFromRing code bug |
Дата | |
Msg-id | 20150704151203.1190.44251@wrigleys.postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #13487: GetBufferFromRing code bug
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 13487 Logged by: will Email address: jingwei_5107@qq.com PostgreSQL version: 9.4.4 Operating system: It does not matter Description: In GetBufferFromRing method(/src/backend/storage/buffer/freelist.c),I think the following code: 506 buf = &BufferDescriptors[bufnum - 1]; 507 LockBufHdr(buf); 508 if (buf->refcount == 0 && buf->usage_count <= 1) 509 { 510 strategy->current_was_in_ring = true; 511 return buf; 512 } 513 UnlockBufHdr(buf); should be changed to(Adding line 510): 506 buf = &BufferDescriptors[bufnum - 1]; 507 LockBufHdr(buf); 508 if (buf->refcount == 0 && buf->usage_count <= 1) 509 { 510 UnlockBufHdr(buf);// add this line 511 strategy->current_was_in_ring = true; 512 return buf; 513 } 514 UnlockBufHdr(buf); It should Unlock the buf before returning buf, after exclusively accessing the buf's refcount&usage_count member. Am I right? Any reply is appreciated if I'm wrong.
В списке pgsql-bugs по дате отправления: