x

포인트 데드락

· 6개월 전 · 74 · 1
포인트 데드락이 발생하는데요

댓글에도 , 로그인에도 데드락이 가끔씩 생깁니다.
모든 mysql reporting 을 켜고 스텍트레이스를 추가하고 로그를 포착했습니다.
insert_use_point 함수에서 발생합니다.

insert_use_point 함수내에
select 쿼리가있는데요 여기 FOR UPDATE 구문을 두어 락을 걸고
이 쿼리 아래 업데이트 쿼리들이 데드락에 빠지지않게 하는것이 필요합니다..

```
$sql = " select po_id, po_point, po_use_point
from {$g5['point_table']}
where mb_id = '$mb_id'
and po_id <> '$po_id'
and po_expired = '0'
and po_point > po_use_point
$sql_order
// FOR UPDATE 구문 추가필요.
";
$result = sql_query($sql);
```

트렌젝션을 써야하지만 그누보드는 MyIsam 지원으로 인해 트랜젝션을 추가할수없으니...
FOR UPDATE 라도 추가하는것을 검토부탁드립니다

트렌젝션이 없으니 데드락이후 포인트들이 꼬이고있습니다.
|

댓글 1개

6개월 전
안녕하세요. SIR 입니다.

그누보드를 사용하는 많은 사람들이 MyIsam 환경의 mysql 을 사용하고 있어서, FOR UPDATE 는 추가할수 없습니다.

insert_use_point_before 이름의 hook 을 추가해 놓을테니, 적절히 사용해 주세요.

https://github.com/gnuboard/gnuboard5/commit/a9eab8d86ae0ce0805cfdb786ad2f1e33f3a80ac

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기
🐛 버그신고