View Issue Details

IDProjectCategoryView StatusLast Update
0000371Gameplay + OpenGL[All Projects] Bugpublic2017-03-03 12:12
ReporterMajor Cooke 
Assigned To 
PrioritynormalSeverityminorReproducibilityhave not tried
Status resolvedResolutionfixed 
Summary0000371: "attempt to save pointer to unhandled type" does not go to fullscreen console
DescriptionWhat the summary said. Yes, I actually maanged to trigger this to happen while experimenting with a post-death exit restore system using global variable approved thinkers (see Nash's thread) somehow, but instead of going to console, it just prints a big fat text on the screen and freezes the game up.
TagsNo tags attached.

Relationships

Activities

Major Cooke

Major Cooke

2017-03-02 20:17

reporter   ~0000843

I figured out how to reproduce the effect and I know what causes it.

Load the test file and start a new game. Then do ChangeMap to another map, can be any. Bam. Instant freeze after the melting screen is gone.

What causes it?

At the top of the ZScript file, you'll see there's a CVar type object defined. If you comment that out, it won't freeze anymore. Also, the cvar test is not invoked at all -- there's no calls to it, or anything.

test.pk3 (2,386 bytes)
Graf Zahl

Graf Zahl

2017-03-03 08:16

administrator   ~0000844

FYI, the problem is that any variable in a serialized class muxt be a serializable type or be declared transient. I guess this will require a compile time check at least for all subclasses of Thinker which have to be fully serializable.

But that's for later. I think fixing the freeze is the more important issue for now.
Major Cooke

Major Cooke

2017-03-03 08:17

reporter   ~0000845

Last edited: 2017-03-03 08:19

View 3 revisions

Agreed. I don't see any harm requiring the transient flag for now, as we can store the results straight to string/float/color/ints easily enough.

_mental_

_mental_

2017-03-03 10:11

developer   ~0000846

My lame attempt to fix the freeze was to add I_FreezeTime(false); line to D_ErrorCleanup() function. Although it won't fly because I_FreezeTime() calls must be balanced.
Found no way to do so with the existing interface. Platform specific backend needs to report time frozen state somehow. Or probably we should remove the balance requirement.
Graf Zahl

Graf Zahl

2017-03-03 11:30

administrator   ~0000849

This cannot fall through to D_ErrorCleanup. It must be caught at a higher level so that proper cleanup of the serializer can be done.

Issue History

Date Modified Username Field Change
2017-03-02 19:23 Major Cooke New Issue
2017-03-02 20:17 Major Cooke File Added: test.pk3
2017-03-02 20:17 Major Cooke Note Added: 0000843
2017-03-03 08:16 Graf Zahl Note Added: 0000844
2017-03-03 08:17 Major Cooke Note Added: 0000845
2017-03-03 08:18 Major Cooke Note Edited: 0000845 View Revisions
2017-03-03 08:19 Major Cooke Note Edited: 0000845 View Revisions
2017-03-03 10:11 _mental_ Note Added: 0000846
2017-03-03 11:30 Graf Zahl Note Added: 0000849
2017-03-03 12:12 Graf Zahl Status new => resolved
2017-03-03 12:12 Graf Zahl Resolution open => fixed