New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

spinlock on Tiled 1.0.1 for macOS (terrain tool logic, hung main thread, infinite loop) #1617

Closed
Bobjt opened this Issue Jun 19, 2017 · 3 comments

Comments

Projects
None yet
2 participants
@Bobjt

Bobjt commented Jun 19, 2017

is it possible to limit the terrain tool's logic to a reasonable perimeter? Sometimes the preview it generates affects the entire map. When this happens, the main thread is hung for quite an alarming amount of time. Finally, while using the terrain tool, the main thread hung indefinitely. I took a spinlock (stack trace) and that is attached.
Spindump-Tiled-deadlock-terrains.txt

@bjorn

This comment has been minimized.

Show comment
Hide comment
@bjorn

bjorn Jun 19, 2017

Owner

is it possible to limit the terrain tool's logic to a reasonable perimeter? Sometimes the preview it generates affects the entire map. When this happens, the main thread is hung for quite an alarming amount of time.

Not at the moment, though this is certainly an area needing improvement. When all transitions it may need are available, the change should usually be minimal, but it can end up modifying the whole map when it can't find any exactly fitting tile. I'll look into building in some kind of sane limit until a better version of the algorithm has been implemented.

Finally, while using the terrain tool, the main thread hung indefinitely. I took a spinlock (stack trace) and that is attached.

Hmm, the stack trace does not mention the terrain tool anywhere, but it mentions the BucketFillTool. Could that have been hanging instead and do you have any way of reproducing that issue?

Owner

bjorn commented Jun 19, 2017

is it possible to limit the terrain tool's logic to a reasonable perimeter? Sometimes the preview it generates affects the entire map. When this happens, the main thread is hung for quite an alarming amount of time.

Not at the moment, though this is certainly an area needing improvement. When all transitions it may need are available, the change should usually be minimal, but it can end up modifying the whole map when it can't find any exactly fitting tile. I'll look into building in some kind of sane limit until a better version of the algorithm has been implemented.

Finally, while using the terrain tool, the main thread hung indefinitely. I took a spinlock (stack trace) and that is attached.

Hmm, the stack trace does not mention the terrain tool anywhere, but it mentions the BucketFillTool. Could that have been hanging instead and do you have any way of reproducing that issue?

@Bobjt

This comment has been minimized.

Show comment
Hide comment
@Bobjt

Bobjt Jun 20, 2017

I tried for a bit tonight to reproduce this and could not. Might have been an ultra rare case. I was fairly sure I was terrain'ing when the lockup occurred, but the stack trace doesn't lie. As a result, I tried mixing in the temporary hangs from my poorly defined terrains that cause the preview to be quite large (thus, a bit slow to render) with switching to and working with fill tool, but with no luck. I'll come back if I find a reproduction case, though, and no worries if I need to file a new ticket at that time. Cheers

Bobjt commented Jun 20, 2017

I tried for a bit tonight to reproduce this and could not. Might have been an ultra rare case. I was fairly sure I was terrain'ing when the lockup occurred, but the stack trace doesn't lie. As a result, I tried mixing in the temporary hangs from my poorly defined terrains that cause the preview to be quite large (thus, a bit slow to render) with switching to and working with fill tool, but with no luck. I'll come back if I find a reproduction case, though, and no worries if I need to file a new ticket at that time. Cheers

@bjorn bjorn added the bug label Jun 26, 2017

@bjorn bjorn self-assigned this Jun 26, 2017

@bjorn

This comment has been minimized.

Show comment
Hide comment
@bjorn

bjorn Jun 26, 2017

Owner

Seems like you ran into #1624.

Owner

bjorn commented Jun 26, 2017

Seems like you ran into #1624.

@bjorn bjorn closed this in adce42c Jun 27, 2017

boaromayo added a commit to boaromayo/tiled that referenced this issue Jun 28, 2017

Update forked repo (#1)
* Fixed crash when editing collision when tile image wasn't loaded

When opening a tileset it can happen that the tileset image fails to
load. In this case, opening the tile collision editor could lead to a
crash.

* GmxPlugin: Fixed tile type inheritance for tile objects

Now tile objects of which the tile has a type defined are exported as
instances of this type of object in the GameMaker room file.

* Added toolbar for stamp brush and bucket fill tool (#1586)

This adds a new tool-specific toolbar that can be used by tools.

Currently contains actions for rotating/flipping stamp and toggling random mode.

Closes #1084

* docs: Fixed link to other page

* QtPropertyBrowser: Removed deprecation warnings

The classes were deprecated in Qt 5.0 and warnings have been added in Qt
5.7.

* Fixed rendering of tile object outlines for resized objects

They were taking the size of the image instead of the size of the
object, which means this was broken since Tiled 0.12.

* Fixed rendering of tile objects when the image couldn't be loaded

If the tile was found but its image failed to load, tile objects would
not render at all and due to a broken boundingRect be also impossible to
interact with.

Now they render as the special "missing image marker" and can be
interacted with.

* More fixes for labels of objects nested in a group layer

* Fixed labels shown on objects hidden via a group layer
* Fixed updating of label visibility when toggling group layer visibility

* Fixed updating of label positions when moving a group layer

When moving a group layer, any labels present for objects nested within
that group layer need to be synchronized.

* GmxPlugin: Added support for defining views with objects (#1621)

* Fixed hang when trying to fill with a pasted stamp

Since 688ec7d the size of a copied map
is set to 0x0 instead of matching the tile layer's size. It was supposed
to be irrelevant, but as it turns out TileStamp::maxSize was based on
the size of the map instead of the size of the tile layer. This could
lead to an infinite loop in fillWithStamp in bucketfilltool.cpp.

Closes #1617
Closes #1624

* Restored Ctrl+N shortcut on "New Map" action

There isn't really a good reason not to have this shortcut. Eventually
it may pop up a dialog where you can pick what you want to create, but
since it's more common to create new maps than new tilesets we can just
do that for now.

* Use initializer list for quick-stamp keys

* Introduced TilesetDocumentsModel and its sort-filter model companion

This model lists the tileset documents that are currently open, and the
sort-filter version sorts them by name and filters out tilesets that are
embedded in other maps than the current one.

This model extracts part of the logic from TilesetDock, so that it could
be reused by an updated TerrainModel. The TerrainModel currently only
lists terrains from tilesets that are already part of the map, but it
should display all loaded external tilesets.

* libtiled-java: Fixed wrong exception being caught in TileSet (#1629)

* Display all tilesets with terrain in the Terrains view

Except for tilesets that are embedded into another map than the current
one, the Terrains view now displays all tilesets that have terrains
defined.

The Terrain Brush will now automatically add the tileset of the
currently selected terrain to the map when it isn't already present.

* Show custom properties on tiles and terrains in the map editor

While still not editable, this change shows these properties in a
read-only fashion. It is often useful to see them, as indicated by
multiple users on the forum.

* Bumped version to 1.0.2 and updated NEWS file

* Adds option to lock/unlock layer (#1627)

Locking a layer prevents modifications to the layer by the tools, as
well as by some actions like cut and delete. Modifications to objects
are prevented by making them not selectable.

Closes #734

* Fixed tool tips on flipping and rotating stamp actions
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment