diff --git a/src/modules/thread/sdl/Thread.cpp b/src/modules/thread/sdl/Thread.cpp index 6aac24605..4043a7afc 100644 --- a/src/modules/thread/sdl/Thread.cpp +++ b/src/modules/thread/sdl/Thread.cpp @@ -303,16 +303,18 @@ namespace sdl return i->second; } - Thread **ThreadModule::getThreads() + void ThreadModule::getThreads(Thread ** list) { - Thread **list = new Thread*[threads.size()+1]; int c = 0; for (threadlist_t::iterator i = threads.begin(); i != threads.end(); i++, c++) { list[c] = i->second; } - list[threads.size()] = 0; - return list; + } + + unsigned ThreadModule::getThreadCount() const + { + return threads.size(); } void ThreadModule::unregister(const std::string & name) diff --git a/src/modules/thread/sdl/Thread.h b/src/modules/thread/sdl/Thread.h index af1a89c4c..69143d205 100644 --- a/src/modules/thread/sdl/Thread.h +++ b/src/modules/thread/sdl/Thread.h @@ -127,8 +127,9 @@ namespace sdl ThreadModule(); virtual ~ThreadModule(); Thread *newThread(const std::string & name, love::Data *data); - Thread **getThreads(); + void getThreads(Thread ** list); Thread *getThread(const std::string & name); + unsigned getThreadCount() const; void unregister(const std::string & name); const char *getName() const; }; // ThreadModule diff --git a/src/modules/thread/sdl/wrap_Thread.cpp b/src/modules/thread/sdl/wrap_Thread.cpp index d6798fff9..fe7c5be9d 100644 --- a/src/modules/thread/sdl/wrap_Thread.cpp +++ b/src/modules/thread/sdl/wrap_Thread.cpp @@ -260,9 +260,11 @@ namespace sdl int w_getThreads(lua_State *L) { - Thread **list = instance->getThreads(); + unsigned count = instance->getThreadCount(); + Thread **list = new Thread*[count]; + instance->getThreads(list); lua_newtable(L); - for (int i = 0; list[i] != 0; i++) + for (unsigned int i = 0; ilock();