Browse Source

Make love.event.clear thread-safe, though it's only callable from the main thread (with SDL backend, anyway)

Bart van Strien 14 years ago
parent
commit
e0dcf55703
3 changed files with 12 additions and 5 deletions
  1. 10 0
      src/modules/event/Event.cpp
  2. 1 0
      src/modules/event/Event.h
  3. 1 5
      src/modules/event/sdl/Event.cpp

+ 10 - 0
src/modules/event/Event.cpp

@@ -99,6 +99,16 @@ namespace event
 		return true;
 		return true;
 	}
 	}
 
 
+	void Event::clear()
+	{
+		Lock lock(mutex);
+		while (!queue.empty())
+		{
+			queue.back()->release();
+			queue.pop();
+		}
+	}
+
 	bool Event::getConstant(const char * in, love::mouse::Mouse::Button & out)
 	bool Event::getConstant(const char * in, love::mouse::Mouse::Button & out)
 	{
 	{
 		return buttons.find(in, out);
 		return buttons.find(in, out);

+ 1 - 0
src/modules/event/Event.h

@@ -58,6 +58,7 @@ namespace event
 
 
 		void push(Message *msg);
 		void push(Message *msg);
 		bool poll(Message *&msg);
 		bool poll(Message *&msg);
+		virtual void clear();
 
 
 		virtual void pump() = 0;
 		virtual void pump() = 0;
 
 

+ 1 - 5
src/modules/event/sdl/Event.cpp

@@ -77,11 +77,7 @@ namespace sdl
 			// Do nothing with 'e' ...
 			// Do nothing with 'e' ...
 		}
 		}
 
 
-		while (!queue.empty())
-		{
-			queue.back()->release();
-			queue.pop();
-		}
+		love::event::Event::clear();
 	}
 	}
 
 
 	Message *Event::convert(SDL_Event & e)
 	Message *Event::convert(SDL_Event & e)