MantisBT - VCMI |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0001245 | VCMI | GUI - Adventure Map | public | 2013-03-18 12:49 | 2014-05-30 17:43 |
|
Reporter | cirdan | |
Assigned To | Ivan | |
Priority | normal | Severity | crash | Reproducibility | always |
Status | closed | Resolution | fixed | |
Platform | x86 | OS | linux | OS Version | |
Product Version | 0.92 | |
Target Version | | Fixed in Version | 0.93 | |
|
Summary | 0001245: Client freeze when visiting hut of the magi |
Description | The client freezes when a hero visits a hut of the magi. It does not crash; the UI is simply frozen (unresponsive).
This is what I have been able to gather: CGMagi:onHeroVisit (in lib/CObjectHandler.cpp) sends a CenterView packet for each eye of the magi, with a timeout of 2000, and lastly another CenterView packet to restore the view on the hero, but without a timeout, and this seems to confuse the client. Indeed, by tracing through CPlayerInterface::centerView (in client/CPlayerInterface.cpp), the focusTime for this last packet is completely bogus (in the order of the millions), so the client hangs in SDL_delay (I guess it would recover if I left it running for a couple of hours...).
The attached patch fixes the bug for me.
I am running self-compiled vcmi with gcc-4.7.2 and boost-1.51.
|
Steps To Reproduce | Visit hut of the magi |
Additional Information | |
Tags | No tags attached. |
Relationships | |
Attached Files | hutofmagi.diff (308) 2013-03-18 12:49 https://bugs.vcmi.eu/file_download.php?file_id=1239&type=bug |
|
Issue History |
Date Modified | Username | Field | Change |
2013-03-18 12:49 | cirdan | New Issue | |
2013-03-18 12:49 | cirdan | File Added: hutofmagi.diff | |
2013-03-29 17:19 | Warmonger | Note Added: 0003472 | |
2013-03-29 17:20 | Warmonger | Note Edited: 0003472 | bug_revision_view_page.php?bugnote_id=3472#r2162 |
2013-03-29 17:21 | Warmonger | Assigned To | => Warmonger |
2013-03-29 17:21 | Warmonger | Status | new => feedback |
2013-03-29 17:41 | Ivan | Note Added: 0003473 | |
2013-03-29 19:16 | Ivan | Note Added: 0003475 | |
2013-03-29 19:16 | Ivan | Status | feedback => resolved |
2013-03-29 19:16 | Ivan | Fixed in Version | => 0.93 |
2013-03-29 19:16 | Ivan | Resolution | open => fixed |
2013-03-29 19:16 | Ivan | Assigned To | Warmonger => Ivan |
2013-04-01 18:53 | cirdan | Note Added: 0003485 | |
2014-05-30 17:43 | beegee | Status | resolved => closed |
Notes |
|
(0003472)
|
Warmonger
|
2013-03-29 17:19
(edited on: 2013-03-29 17:20) |
|
I couldn't reproduce freeze. Also, cv object stores focus time outside the loop, so it should remain initialized. Any details on this issue?
CenterView cv;
FoWChange fw;
cv.player = fw.player = h->tempOwner;
showInfoDialog(h,61,soundBase::LIGHTHOUSE);
fw.mode = 1;
BOOST_FOREACH(auto it, eyelist[subID])
{
const CGObjectInstance *eye = cb->getObj(it);
cb->getTilesInRange (fw.tiles, eye->pos, 10, h->tempOwner, 1);
cb->sendAndApply(&fw);
cv.pos = eye->pos;
cv.focusTime = 2000;
cb->sendAndApply(&cv);
}
cv.pos = h->getPosition(false);
cb->sendAndApply(&cv);
|
|
|
(0003473)
|
Ivan
|
2013-03-29 17:41
|
|
Judging from code - if there 0 eyes focusTime won't be initialized. Maybe this is where freeze comes from? |
|
|
(0003475)
|
Ivan
|
2013-03-29 19:16
|
|
Should be fixed, rev 3298 |
|
|
(0003485)
|
cirdan
|
2013-04-01 18:53
|
|
I agree with your analysis. I was playing Titan's winter, which doesn't have any eye of the magi.
Thanks for fixing this. |
|