Reference counting for love objects in 0.9.2 is now atomic (using SDL's atomic operation functions.)

This commit is contained in:
Alex Szpakowski
2015-01-14 15:52:05 -04:00
parent 1b41d546e2
commit 811f574ef6
3 changed files with 15 additions and 10 deletions
+5 -7
View File
@@ -21,33 +21,31 @@
// LOVE
#include "Object.h"
#include <stdio.h>
namespace love
{
Object::Object()
: count(1)
{
count.value = 1;
}
Object::~Object()
{
}
int Object::getReferenceCount() const
int Object::getReferenceCount()
{
return count;
return SDL_AtomicGet(&count);
}
void Object::retain()
{
++count;
SDL_AtomicIncRef(&count);
}
void Object::release()
{
if (--count <= 0)
if (SDL_AtomicDecRef(&count))
delete this;
}
+9 -2
View File
@@ -21,6 +21,13 @@
#ifndef LOVE_OBJECT_H
#define LOVE_OBJECT_H
/**
* NOTE: the fact that an SDL header is included in such a widely used header
* file is only temporary - in the LOVE 0.10+ codebase we use atomics from
* C++11's standard library.
**/
#include <SDL_atomic.h>
namespace love
{
@@ -50,7 +57,7 @@ public:
* Gets the reference count of this Object.
* @returns The reference count.
**/
int getReferenceCount() const;
int getReferenceCount();
/**
* Retains the Object, i.e. increases the
@@ -155,7 +162,7 @@ public:
private:
// The reference count.
int count;
SDL_atomic_t count;
}; // Object
+1 -1
View File
@@ -247,7 +247,7 @@ int w_isConvex(lua_State *L)
}
}
lua_pushboolean(L, Math::instance.isConvex(vertices));
luax_pushboolean(L, Math::instance.isConvex(vertices));
return 1;
}