Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
7z: do global initialization once without risking a race condition.
  • Loading branch information
icculus committed Aug 14, 2017
1 parent 1364f6a commit dd68246
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 8 deletions.
1 change: 1 addition & 0 deletions src/physfs.c
Expand Up @@ -1143,6 +1143,7 @@ static int initStaticArchivers(void)
REGISTER_STATIC_ARCHIVER(ZIP);
#endif
#if PHYSFS_SUPPORTS_7Z
SZIP_global_init();
REGISTER_STATIC_ARCHIVER(7Z);
#endif
#if PHYSFS_SUPPORTS_GRP
Expand Down
21 changes: 13 additions & 8 deletions src/physfs_archiver_7z.c
Expand Up @@ -217,14 +217,6 @@ static void *SZIP_openArchive(PHYSFS_Io *io, const char *name, int forWriting)
SZIPinfo *info = NULL;
SRes rc;

/* !!! FIXME-3.0: this is a race condition; we need a global init method that gets called when registering new archivers. */
static int generatedTable = 0;
if (!generatedTable)
{
generatedTable = 1;
CrcGenerateTable();
} /* if */

BAIL_IF(forWriting, PHYSFS_ERR_READ_ONLY, NULL);

info = (SZIPinfo *) allocator.Malloc(sizeof (SZIPinfo));
Expand Down Expand Up @@ -387,6 +379,19 @@ static int SZIP_stat(void *opaque, const char *path, PHYSFS_Stat *stat)
} /* SZIP_stat */


void SZIP_global_init(void)
{
/* this just needs to calculate some things, so it only ever
has to run once, even after a deinit. */
static int generatedTable = 0;
if (!generatedTable)
{
generatedTable = 1;
CrcGenerateTable();
} /* if */
} /* SZIP_global_init */


const PHYSFS_Archiver __PHYSFS_Archiver_7Z =
{
CURRENT_PHYSFS_ARCHIVER_API_VERSION,
Expand Down
5 changes: 5 additions & 0 deletions src/physfs_internal.h
Expand Up @@ -193,6 +193,11 @@ void __PHYSFS_smallFree(void *ptr);
#define PHYSFS_SUPPORTS_VDF 1
#endif

#if PHYSFS_SUPPORTS_7Z
/* 7zip support needs a global init function called at startup (no deinit). */
extern void SZIP_global_init(void);
#endif

/* The latest supported PHYSFS_Io::version value. */
#define CURRENT_PHYSFS_IO_API_VERSION 0

Expand Down

0 comments on commit dd68246

Please sign in to comment.