mirror of
git://xwords.git.sourceforge.net/gitroot/xwords/xwords
synced 2025-01-08 05:24:39 +01:00
cbb683fc74
As reported to google, dict iterator destruction was crashing due to a race condition if it happened after a game using the same dict had been closed since it needed a mapped env that the game closure would remove. Fixed in two ways, one by adding the mapping prior to the code that uses it (a common pattern: add happens many times, whenver it might be needed, but remove only once), and second by passing env into the code that was crashing. The mapping stuff remains inherently racy and I'm not sure now how to fix that. It depends on there being a place to unmap after which it's guaranteed the mapped value won't be needed again. When two objects (game and dict_iter in this case) map the same env/thread combo there's a race.
47 lines
1.7 KiB
C
47 lines
1.7 KiB
C
/* -*-mode: C; fill-column: 76; c-basic-offset: 4; -*- */
|
|
/*
|
|
* Copyright 2001-2010 by Eric House (xwords@eehouse.org). All rights
|
|
* reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef _JNIUTLSWRAPPER_H_
|
|
#define _JNIUTLSWRAPPER_H_
|
|
|
|
#include <jni.h>
|
|
|
|
#include "util.h"
|
|
#include "andglobals.h"
|
|
|
|
typedef struct JNIUtilCtxt JNIUtilCtxt;
|
|
|
|
JNIUtilCtxt* makeJNIUtil( MPFORMAL JNIEnv* env, EnvThreadInfo* ti,
|
|
jobject jniutls );
|
|
void destroyJNIUtil( JNIEnv* env, JNIUtilCtxt** jniu );
|
|
|
|
jobject and_util_makeJBitmap( JNIUtilCtxt* jniu, int nCols, int nRows,
|
|
const jboolean* colors );
|
|
jobject and_util_splitFaces( JNIUtilCtxt* jniu, const XP_U8* bytes, int len,
|
|
XP_Bool isUTF8 );
|
|
|
|
jstring and_util_getMD5SumForDict( JNIUtilCtxt* jniutil, const XP_UCHAR* name,
|
|
const XP_U8* bytes, jsize len );
|
|
|
|
#ifdef COMMS_CHECKSUM
|
|
jstring and_util_getMD5SumForBytes( JNIUtilCtxt* jniutil, const XP_U8* bytes,
|
|
jsize len );
|
|
#endif
|
|
#endif
|