MantisBT - VCMI | |||||
| View Issue Details | |||||
| ID | Project | Category | View Status | Date Submitted | Last Update |
| 0003154 | VCMI | AI - Battles | public | 2020-10-25 06:49 | 2022-03-27 18:30 |
| Reporter | jambolo | ||||
| Assigned To | Nullkiller | ||||
| Priority | normal | Severity | minor | Reproducibility | have not tried |
| Status | resolved | Resolution | fixed | ||
| Platform | OS | OS Version | |||
| Product Version | |||||
| Target Version | Fixed in Version | 1.next | |||
| Summary | 0003154: Potential race condition locking a weak pointer | ||||
| Description | There is a potential race condition at lines 52 - 55 in client\battle\CBattleInterface.cpp. <code> if(anim.expired()) return; std::shared_ptr<CCreatureAnimation> animation = anim.lock(); if (animation->isIdle()) </code> Using a shared pointer obtained by locking a weak pointer without checking the result of the lock could result in a crash if the shared pointer has expired before lock() is called. When expired() is called before lock() in a multi-threaded environment, it is possible for the shared pointer to expire between expired() and lock(). The safe method is to check the result of lock(). | ||||
| Steps To Reproduce | |||||
| Additional Information | |||||
| Tags | R1 | ||||
| Relationships | |||||
| Attached Files | |||||
| Issue History | |||||
| Date Modified | Username | Field | Change | ||
| 2020-10-25 06:49 | jambolo | New Issue | |||
| 2020-10-25 06:50 | jambolo | Note Added: 0007946 | |||
| 2022-03-17 09:43 | Povelitel | Assigned To | => Nullkiller | ||
| 2022-03-17 09:43 | Povelitel | Status | new => assigned | ||
| 2022-03-22 19:35 | Povelitel | Tag Attached: R1 | |||
| 2022-03-27 18:30 | Povelitel | Status | assigned => resolved | ||
| 2022-03-27 18:30 | Povelitel | Fixed in Version | => 1.next | ||
| 2022-03-27 18:30 | Povelitel | Resolution | open => fixed | ||
| Notes | |||||
|
|
|||||
|
|
||||