Revert "Free objects in their destructors;"

This reverts commit d31dca5520.

We can't unconditionally free because sometimes objects are temporarily
allocated on the stack.
This commit is contained in:
bjorn 2019-04-05 05:44:24 -07:00
parent a5891bad92
commit 011db5f1e5
23 changed files with 6 additions and 29 deletions

View File

@ -2,6 +2,7 @@
#include "data/audioStream.h"
#include "data/soundData.h"
#include <string.h>
#include <stdlib.h>
static int l_lovrAudioStreamDecode(lua_State* L) {
AudioStream* stream = luax_checktype(L, 1, AudioStream);

View File

@ -1,6 +1,7 @@
#include "api.h"
#include "audio/microphone.h"
#include "data/soundData.h"
#include <stdlib.h>
static int l_lovrMicrophoneGetBitDepth(lua_State* L) {
Microphone* microphone = luax_checktype(L, 1, Microphone);

View File

@ -18,7 +18,6 @@ void lovrMicrophoneDestroy(void* ref) {
Microphone* microphone = ref;
lovrMicrophoneStopRecording(microphone);
alcCaptureCloseDevice(microphone->device);
free(microphone);
}
int lovrMicrophoneGetBitDepth(Microphone* microphone) {

View File

@ -38,7 +38,6 @@ void lovrSourceDestroy(void* ref) {
alDeleteBuffers(source->type == SOURCE_STATIC ? 1 : SOURCE_BUFFERS, source->buffers);
lovrRelease(SoundData, source->soundData);
lovrRelease(AudioStream, source->stream);
free(source);
}
SourceType lovrSourceGetType(Source* source) {

View File

@ -29,7 +29,6 @@ void lovrAudioStreamDestroy(void* ref) {
stb_vorbis_close(stream->decoder);
lovrRelease(Blob, stream->blob);
free(stream->buffer);
free(stream);
}
int lovrAudioStreamDecode(AudioStream* stream, short* destination, int size) {

View File

@ -11,5 +11,4 @@ Blob* lovrBlobInit(Blob* blob, void* data, size_t size, const char* name) {
void lovrBlobDestroy(void* ref) {
Blob* blob = ref;
free(blob->data);
free(blob);
}

View File

@ -22,7 +22,6 @@ void lovrModelDataDestroy(void* ref) {
lovrRelease(TextureData, model->textures[i]);
}
free(model->data);
free(model);
}
// Note: this code is a scary optimization

View File

@ -37,7 +37,6 @@ Rasterizer* lovrRasterizerInit(Rasterizer* rasterizer, Blob* blob, float size) {
void lovrRasterizerDestroy(void* ref) {
Rasterizer* rasterizer = ref;
lovrRelease(Blob, rasterizer->blob);
free(rasterizer);
}
bool lovrRasterizerHasGlyph(Rasterizer* rasterizer, uint32_t character) {

View File

@ -13,7 +13,6 @@ void lovrFileDestroy(void* ref) {
if (file->handle) {
PHYSFS_close(file->handle);
}
free(file);
}
int lovrFileOpen(File* file, FileMode mode) {

View File

@ -37,7 +37,6 @@ void lovrAnimatorDestroy(void* ref) {
Animator* animator = ref;
lovrRelease(ModelData, animator->data);
vec_deinit(&animator->tracks);
free(animator);
}
void lovrAnimatorReset(Animator* animator) {

View File

@ -59,7 +59,6 @@ void lovrFontDestroy(void* ref) {
}
map_deinit(&font->atlas.glyphs);
map_deinit(&font->kerning);
free(font);
}
Rasterizer* lovrFontGetRasterizer(Font* font) {

View File

@ -29,7 +29,6 @@ void lovrMaterialDestroy(void* ref) {
for (int i = 0; i < MAX_MATERIAL_TEXTURES; i++) {
lovrRelease(Texture, material->textures[i]);
}
free(material);
}
void lovrMaterialBind(Material* material, Shader* shader) {

View File

@ -197,7 +197,6 @@ void lovrModelDestroy(void* ref) {
lovrRelease(Mesh, model->meshes[i]);
}
lovrRelease(ModelData, model->data);
free(model);
}
void lovrModelDraw(Model* model, mat4 transform, int instances) {

View File

@ -1242,7 +1242,6 @@ void lovrTextureDestroy(void* ref) {
glDeleteTextures(1, &texture->id);
glDeleteRenderbuffers(1, &texture->msaaId);
lovrGpuDestroySyncResource(texture, texture->incoherent);
free(texture);
}
void lovrTextureAllocate(Texture* texture, int width, int height, int depth, TextureFormat format) {
@ -1487,7 +1486,6 @@ void lovrCanvasDestroy(void* ref) {
lovrRelease(Texture, canvas->attachments[i].texture);
}
lovrRelease(Texture, canvas->depth.texture);
free(canvas);
}
void lovrCanvasResolve(Canvas* canvas) {
@ -1600,7 +1598,6 @@ void lovrBufferDestroy(void* ref) {
#ifndef LOVR_WEBGL
}
#endif
free(buffer);
}
void* lovrBufferMap(Buffer* buffer, size_t offset) {
@ -1965,7 +1962,6 @@ void lovrShaderDestroy(void* ref) {
map_deinit(&shader->attributes);
map_deinit(&shader->uniformMap);
map_deinit(&shader->blockMap);
free(shader);
}
// Mesh
@ -1992,7 +1988,6 @@ void lovrMeshDestroy(void* ref) {
lovrRelease(Buffer, mesh->vertexBuffer);
lovrRelease(Buffer, mesh->indexBuffer);
lovrRelease(Material, mesh->material);
free(mesh);
}
void lovrMeshSetIndexBuffer(Mesh* mesh, Buffer* buffer, uint32_t indexCount, size_t indexSize, size_t offset) {

View File

@ -199,7 +199,6 @@ void lovrShaderBlockDestroy(void* ref) {
lovrRelease(Buffer, block->buffer);
vec_deinit(&block->uniforms);
map_deinit(&block->uniformMap);
free(block);
}
BlockType lovrShaderBlockGetType(ShaderBlock* block) {

View File

@ -51,5 +51,5 @@ void lovrHeadsetDestroy() {
}
void lovrControllerDestroy(void* ref) {
free(ref);
//
}

View File

@ -46,7 +46,6 @@ Curve* lovrCurveInit(Curve* curve, int sizeHint) {
void lovrCurveDestroy(void* ref) {
Curve* curve = ref;
vec_deinit(&curve->points);
free(curve);
}
void lovrCurveEvaluate(Curve* curve, float t, vec3 p) {

View File

@ -18,7 +18,6 @@ Pool* lovrPoolInit(Pool* pool, size_t size) {
void lovrPoolDestroy(void* ref) {
Pool* pool = ref;
free(pool->data);
free(pool);
}
float* lovrPoolAllocate(Pool* pool, MathType type) {

View File

@ -29,7 +29,7 @@ RandomGenerator* lovrRandomGeneratorInit(RandomGenerator* generator) {
}
void lovrRandomGeneratorDestroy(void* ref) {
free(ref);
//
}
Seed lovrRandomGeneratorGetSeed(RandomGenerator* generator) {

View File

@ -68,7 +68,6 @@ void lovrWorldDestroy(void* ref) {
lovrWorldDestroyData(world);
vec_deinit(&world->overlaps);
map_deinit(&world->tags);
free(world);
}
void lovrWorldDestroyData(World* world) {
@ -301,7 +300,6 @@ void lovrColliderDestroy(void* ref) {
lovrColliderDestroyData(collider);
vec_deinit(&collider->shapes);
vec_deinit(&collider->joints);
free(collider);
}
void lovrColliderDestroyData(Collider* collider) {
@ -664,7 +662,6 @@ void lovrColliderGetAABB(Collider* collider, float aabb[6]) {
void lovrShapeDestroy(void* ref) {
Shape* shape = ref;
lovrShapeDestroyData(shape);
free(shape);
}
void lovrShapeDestroyData(Shape* shape) {
@ -874,7 +871,6 @@ void lovrCylinderShapeSetLength(CylinderShape* cylinder, float length) {
void lovrJointDestroy(void* ref) {
Joint* joint = ref;
lovrJointDestroyData(joint);
free(joint);
}
void lovrJointDestroyData(Joint* joint) {

View File

@ -16,7 +16,6 @@ void lovrChannelDestroy(void* ref) {
vec_deinit(&channel->messages);
mtx_destroy(&channel->lock);
cnd_destroy(&channel->cond);
free(channel);
}
bool lovrChannelPush(Channel* channel, Variant variant, double timeout, uint64_t* id) {

View File

@ -48,7 +48,6 @@ void lovrThreadDestroy(void* ref) {
Thread* thread = ref;
mtx_destroy(&thread->lock);
thrd_detach(thread->handle);
free(thread);
}
void lovrThreadStart(Thread* thread) {

View File

@ -64,5 +64,5 @@ Ref* _lovrAlloc(size_t size, Type type);
#define lovrAlloc(T) (T*) _lovrAlloc(sizeof(T), T_ ## T)
#define lovrRetain(r) if (r && ++(((Ref*) r)->count) >= 0xff) lovrThrow("Ref count overflow")
#define lovrRelease(T, r) if (r && --(((Ref*) r)->count) == 0) lovr ## T ## Destroy(r)
#define lovrGenericRelease(r) if (r && --(((Ref*) r)->count) == 0) lovrTypeInfo[((Ref*) r)->type].destructor(r)
#define lovrRelease(T, r) if (r && --(((Ref*) r)->count) == 0) lovr ## T ## Destroy(r), free(r)
#define lovrGenericRelease(r) if (r && --(((Ref*) r)->count) == 0) lovrTypeInfo[((Ref*) r)->type].destructor(r), free(r)