x

포인트 데드락

· 7개월 전 · 133 · 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개

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

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

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

https://github.com/gnuboard/gnuboard5/commit/a9eab8d86ae0ce0805cfdb786ad2f1e33f3a80ac
댓글을 작성하시려면 로그인이 필요합니다.

그누보드5 이슈

좋은 댓글과 좋아요는 제작자에게 큰힘이 됩니다.

+
제목 글쓴이 날짜 조회
mmytajimilife...
2개월 전 조회 76
2개월 전 조회 72
5개월 전 조회 112
7개월 전 조회 221
7개월 전 조회 134
7개월 전 조회 140
7개월 전 조회 143
8개월 전 조회 202
8개월 전 조회 123
8개월 전 조회 131
11개월 전 조회 151
1년 전 조회 160
1년 전 조회 264
1년 전 조회 175
1년 전 조회 164
1년 전 조회 207
1년 전 조회 192
1년 전 조회 192
1년 전 조회 218
1년 전 조회 204