Hi,

I'm writing an extension to php. After changing my code to have thread safe
globals ,
my extension is crashing and I can't figure out what it is:

typedef struct {
 HashTable array_dl_handle; /* hash user dll name -> handle, getobject,
getcompiler, destroyobject */
 HashTable array_compiler;  /* hash compiler name -> handle, gps, gms,
version */
} php_delphi_globals;

#ifdef ZTS
#define DG(v) (delphi_globals->v)
#define DG_FETCH() php_delphi_globals *delphi_globals =
ts_resource(delphi_globals_id)
#define DG_D       php_delphi_globals *delphi_globals
#define DG_DC      , DG_D
#define DG_C       delphi_globals
#define DG_CC      , DG_C
int delphi_globals_id;
#else
#define DG(v) (delphi_globals.v)
#define DG_FETCH()
#define DG_D
#define DG_DC
#define DG_C
#define DG_CC
php_delphi_globals delphi_globals;
#endif

#ifdef ZTS
static void alloc_delphi_globals_ctor(php_delphi_globals *delphi_globals) {
  memset(delphi_globals, 0, sizeof(php_delphi_globals));
}
#endif

ZEND_MINIT_FUNCTION(delphi) {
#ifdef ZTS
  delphi_globals_id = ts_allocate_id(sizeof(php_delphi_globals),
    (ts_allocate_ctor)alloc_delphi_globals_ctor, NULL);
#endif
...

 DG_FETCH();
 zend_hash_init(&DG(array_dl_handle), 0, NULL, NULL, 0);
 zend_hash_init(&DG(array_compiler), 0, NULL, NULL, 0);
....
}

It crashes when I do in one function:

DG_FETCH();
zend_hash_find(&DG(array_dl_handle), module_name,strlen(module_name)+1,
(void **)&value);

My hashtable is empty.
When array_dl_handle was not part of ZTS globals, everything was OK. Any
clue ?

Gilles.



-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to