Some threading fixes (prevents some dead-locks).

diff --git a/dlls/ddraw/d3ddevice/mesa.c b/dlls/ddraw/d3ddevice/mesa.c
index 3880e28..faad8ba 100644
--- a/dlls/ddraw/d3ddevice/mesa.c
+++ b/dlls/ddraw/d3ddevice/mesa.c
@@ -1666,6 +1666,8 @@
         This->state_block.texture_stage_state[dwStage][D3DTSS_ADDRESSU - 1] = dwState;
 	This->state_block.texture_stage_state[dwStage][D3DTSS_ADDRESSV - 1] = dwState;
     }
+
+    ENTER_GL();
     
     switch (d3dTexStageStateType) {
         case D3DTSS_MINFILTER:
@@ -2006,7 +2008,9 @@
 	    FIXME(" Unhandled stage type : %s => %08lx\n", type, dwState);
 	    break;
     }
-   
+
+    LEAVE_GL();
+    
     return DD_OK;
 }
 
@@ -3016,7 +3020,9 @@
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, max_tex);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_tex);
     glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, tex_env);
+    LEAVE_GL();
     d3d_dev->matrices_updated(d3d_dev, TEXMAT0_CHANGED);
+    ENTER_GL();
 #if 0
     /* I keep this code here as it's very useful to debug :-) */
     {
diff --git a/dlls/ddraw/d3dtexture.c b/dlls/ddraw/d3dtexture.c
index 7327b32..75ef6ea 100644
--- a/dlls/ddraw/d3dtexture.c
+++ b/dlls/ddraw/d3dtexture.c
@@ -723,6 +723,7 @@
 		glReadBuffer(GL_BACK);
 	    else {
 		ERR("Wrong surface type for locking !\n");
+		glBindTexture(GL_TEXTURE_2D, cur_tex);
 		LEAVE_GL();
 		return DDERR_INVALIDPARAMS;
 	    }