myext_globals->global_value vs MYEXT_G(global_value)

[email protected] (j adams)
Newsgroups php.pecl.dev
Message-ID <[email protected]>
I am wondering about the correct way to deal with global vars when
writing a PECL extension. I hope to have a myext_last_error sort of
function where one might find the last error encountered.  In the JSON
extension, I see such a global variable declared in php_json.h:

ZEND_BEGIN_MODULE_GLOBALS(json)
	int error_code;
ZEND_END_MODULE_GLOBALS(json)

And then initialized in a function I have not yet seen documented in
any of the 'getting started' materials:
/* {{{ PHP_GINIT_FUNCTION
*/
static PHP_GINIT_FUNCTION(json)
{
    json_globals->error_code = 0;
}
/* }}} */

This json_globals->error_code assignment puzzles me for two reasons.

First, what is this PHP_GINIT_FUNCTION? I've searched for it in the
opengrok system and have seen it used in many places but this doesn't
tell me when it is executed or what the function is for.

Second, in the files generated by ext_skel, I see this:
/* In every utility function you add that needs to use variables
   in php_fmog_globals, call TSRMLS_FETCH(); after declaring other
   variables used by that function, or better yet, pass in TSRMLS_CC
   after the last function argument and declare your utility function
   with TSRMLS_DC after the last declared argument.  Always refer to
   the globals in your function as FMOG_G(variable).  You are
   encouraged to rename these macros something shorter, see
   examples in any other php module directory.
*/

#ifdef ZTS
#define FMOG_G(v) TSRMG(fmog_globals_id, zend_fmog_globals *, v)
#else
#define FMOG_G(v) (fmog_globals.v)
#endif


It seems to me that a last_error type var should be initiated in a
MINIT function, no?  Also, which is the correct way to reference this
var?  It is my desire to have a function which is global to the scope
my file myext.c but I don't want any crosstalk between concurrent
processes that might be running this code.

Any insight would be very much appreciated.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.