Back to the Vavoom Forum Archives
Nicholas
Init: Adding ./basev/common/basepak.pk3 Init: adding ./doom.wad Init: adding /home/nicholas/.vavoom/doom.gwa Init: Adding ./basev/doom/basepak.pk3 Init: Adding ./basev/doom1/basepak.pk3 Init: Host name: nicholas-desktop Init: My IP address: 127.0.1.1 Init: UDP Initialised DevNet: TCP/IP address 127.0.1.1 Init: Selected SDL sound device Init: Configured audio device Init: Driver: alsa Init: Freqency: 44100 Init: Channels: 2 Init: Format: 8010 Init: Selected SDL midi device Init: Selected Linux CD audio device Init: CD_Init: open of "/dev/cdrom" failed (123) Init: Using 16 voices Init: Selected SDL software rasteriser Log: Executing startup.vs Log: Executing default.cfg Log: Can't find config.cfg Log: Can't find autoexec.cfg Log: Invalid bpp, using 8 Init: 1312k surface cache Log: 640x480x8. Log: timidity.cfg: No such file or directory Log: Timidity init failed Log: Playing demo from demos/demo1.dem. Log: ERROR: couldn't open. Log: Playing demo from demos/demo2.dem. Log: ERROR: couldn't open. Log: Playing demo from demos/demo3.dem. Log: ERROR: couldn't open. Log: Playing demo from demos/demo4.dem. Log: ERROR: couldn't open. Log: timidity.cfg: No such file or directory Log: Timidity init failed Dev: Spawning server e1m1 Dev: Server spawned Dev: CL_EstablishConnection: connected to local Dev: Client LOCAL connected Log: --------------------------------------- Log: E1M1: Hangar Log: Dev: Client level loaded Dev: 186 subdivides Dev: 86 seg subdivides Dev: 16k light mem Log: timidity.cfg: No such file or directory Log: Timidity init failed Log: Picked up an armor bonus.The only reason I ever found Vavoom is because PrBoom had this issue and I couldn't get any other Doom source ports to compile. I played Doom with PrBoom when I used a 32-bit version of Ubuntu so this seems to be a 64-bit-related issue. There are two bug reports for PrBoom describing freezes/lock ups: <!-- m --><a class="postlink" href="https://launchpad.net/ubuntu/+source/prboom/+bugs">https://launchpad.net/ubuntu/+source/prboom/+bugs</a><!-- m --> Perhaps those can help you somehow. I hope I can play Doom soon. <!-- s:) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":)" title="Smile" /><!-- s:) -->
scen
scen
--- source/vclass.h 2007/04/17 21:35:04 2156
+++ source/vclass.h 2007/05/07 16:48:35 2237
@@ -375,6 +375,7 @@
VClass* ParentClass;
vint32 ClassSize;
+ vint32 ClassUnalignedSize;
vuint32 ClassFlags;
VMethod** ClassVTable;
void (*ClassConstructor)();
--- source/vclass.cpp 2007/04/27 18:01:49 2191
+++ source/vclass.cpp 2007/05/18 16:27:42 2241
@@ -27,6 +27,20 @@
#include "progdefs.h"
#include "network.h"
+class DummyClass1 : public VVirtualObjectBase
+{
+public:
+ void* Pointer;
+ vuint8 Byte1;
+ virtual void Dummy() = 0;
+};
+
+class DummyClass2 : public DummyClass1
+{
+public:
+ vuint8 Byte2;
+};
+
bool VMemberBase::GObjInitialised;
VClass* VMemberBase::GClasses;
TArray<VMemberBase*> VMemberBase::GMembers;
@@ -2353,6 +2367,7 @@
, LinkNext(0)
, ParentClass(0)
, ClassSize(0)
+, ClassUnalignedSize(0)
, ClassFlags(0)
, ClassVTable(0)
, ClassConstructor(0)
@@ -2388,6 +2403,7 @@
, LinkNext(0)
, ParentClass(AParent)
, ClassSize(ASize)
+, ClassUnalignedSize(ASize)
, ClassFlags(AClassFlags)
, ClassVTable(0)
, ClassConstructor(ACtor)
@@ -2477,6 +2493,8 @@
delete[] Defaults;
Defaults = NULL;
}
+ StatesLookup.Clear();
+ RepInfos.Clear();
unguard;
}
@@ -2849,10 +2867,7 @@
return;
}
- int PrevSize = ClassSize;
- int size = ParentClass ? ParentClass->ClassSize : 0;
int numMethods = ParentClass ? ParentClass->ClassNumMethods : 0;
- VField* PrevField = NULL;
for (int i = 0; i < GMembers.Num(); i++)
{
if (GMembers->MemberType != MEMBER_Method ||
@@ -2877,6 +2892,21 @@
}
M->VTableIndex = MOfs;
}
+
+ VField* PrevField = NULL;
+ int PrevSize = ClassSize;
+ int size = 0;
+ if (ParentClass)
+ {
+ // GCC has a strange behavior of starting to add fields in subclasses
+ // in a class that has virtual methods on unaligned parent size offset.
+ // In other cases and in other compilers it starts on aligned parent
+ // class size offset.
+ if (sizeof(DummyClass1) == sizeof(DummyClass2))
+ size = ParentClass->ClassUnalignedSize;
+ else
+ size = ParentClass->ClassSize;
+ }
for (VField* fi = Fields; fi; fi = fi->Next)
{
if (fi->Type.Type == ev_bool && PrevField &&
@@ -2904,6 +2934,7 @@
}
PrevField = fi;
}
+ ClassUnalignedSize = size;
size = (size + sizeof(void*) - 1) & ~(sizeof(void*) - 1);
ClassSize = size;
ClassNumMethods = numMethods;