aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetar Jovanovic <petar.jovanovic@imgtec.com>2013-05-17 18:50:21 +0200
committerPetar Jovanovic <petar.jovanovic@imgtec.com>2013-05-17 19:58:11 +0200
commit47ea21f83af03c38cb710ad4204ce38b561dea6b (patch)
treeebc01535caa3f1faa4070718312e61b905645035
parentc8eea39074faaaee5e8390e347fec27cbfbbffdb (diff)
downloadsdk-47ea21f83af03c38cb710ad4204ce38b561dea6b.zip
sdk-47ea21f83af03c38cb710ad4204ce38b561dea6b.tar.gz
sdk-47ea21f83af03c38cb710ad4204ce38b561dea6b.tar.bz2
Prevent SocketStream to be freed twice
In cases when RenderThread failed to start, RenderServer would free the stream first and then the thread. However, the thread itself also attemps to free the stream and this caused a crash of the emulator in some corner cases. Change-Id: I2e508c37ab0a09c9261b30e59072bf1a44982dfe
-rw-r--r--emulator/opengl/host/libs/libOpenglRender/RenderServer.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/emulator/opengl/host/libs/libOpenglRender/RenderServer.cpp b/emulator/opengl/host/libs/libOpenglRender/RenderServer.cpp
index c726e00..0acb307 100644
--- a/emulator/opengl/host/libs/libOpenglRender/RenderServer.cpp
+++ b/emulator/opengl/host/libs/libOpenglRender/RenderServer.cpp
@@ -106,12 +106,11 @@ int RenderServer::Main()
if (!rt) {
fprintf(stderr,"Failed to create RenderThread\n");
delete stream;
- }
-
- if (!rt->start()) {
+ stream = NULL;
+ } else if (!rt->start()) {
fprintf(stderr,"Failed to start RenderThread\n");
- delete stream;
delete rt;
+ rt = NULL;
}
//
@@ -133,10 +132,11 @@ int RenderServer::Main()
}
}
- // insert the added thread to the list
- threads.insert(rt);
-
- DBG("Started new RenderThread\n");
+ // if the thread has been created and started, insert it to the list
+ if (rt) {
+ threads.insert(rt);
+ DBG("Started new RenderThread\n");
+ }
}
//