MantisBT

View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001245VCMIGUI - Adventure Mappublic2013-03-18 12:492014-05-30 17:43
Reportercirdan 
Assigned ToIvan 
PrioritynormalSeveritycrashReproducibilityalways
StatusclosedResolutionfixed 
Platformx86OSlinuxOS Version
Product Version0.92 
Target VersionFixed in Version0.93 
Summary0001245: Client freeze when visiting hut of the magi
DescriptionThe 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 ReproduceVisit hut of the magi
TagsNo tags attached.
Attached Filesdiff file icon hutofmagi.diff [^] (308 bytes) 2013-03-18 12:49 [Show Content]

- Relationships

-  Notes
(0003472)
Warmonger (administrator)
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 (developer)
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 (developer)
2013-03-29 19:16

Should be fixed, rev 3298
(0003485)
cirdan (reporter)
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.

- 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 View Revisions
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

Site | Forums | Wiki | Slack | GitHub


Copyright © 2000 - 2024 MantisBT Team
Hosting provided by DigitalOcean