RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 08-Apr-2009 08:09:59 Branch: HEAD Handle: 2009040806095801 Modified files: rpm CHANGES rpm/rpmio poptIO.c rpmio.c rpmlua.c rpmlua.h Log: - yarn: convert rpmluav to usage mutex with refcounts - yarn: convert rpmlua to usage mutex with refcounts Summary: Revision Changes Path 1.2909 +2 -0 rpm/CHANGES 1.40 +7 -1 rpm/rpmio/poptIO.c 1.184 +6 -0 rpm/rpmio/rpmio.c 2.69 +65 -26 rpm/rpmio/rpmlua.c 2.16 +2 -0 rpm/rpmio/rpmlua.h ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.2908 -r1.2909 CHANGES --- rpm/CHANGES 7 Apr 2009 23:32:59 -0000 1.2908 +++ rpm/CHANGES 8 Apr 2009 06:09:58 -0000 1.2909 @@ -1,5 +1,7 @@ 5.2a3 -> 5.2a4: + - jbj: yarn: convert rpmluav to usage mutex with refcounts + - jbj: yarn: convert rpmlua to usage mutex with refcounts - jbj: python: wire-up %post -p <python>. arg1/arg2, persistent interp, todo++. - jbj: python: wire-up %{python:...}. the string result is bogus, todo++. - jbj: python: add --with-pythonembed for embedding python. @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/poptIO.c ============================================================================ $ cvs diff -u -r1.39 -r1.40 poptIO.c --- rpm/rpmio/poptIO.c 7 Apr 2009 22:57:48 -0000 1.39 +++ rpm/rpmio/poptIO.c 8 Apr 2009 06:09:59 -0000 1.40 @@ -66,6 +66,8 @@ /*...@unchecked@*/ extern int _rpmiob_debug; /*...@unchecked@*/ +extern int _rpmlua_debug; +/*...@unchecked@*/ extern int _rpmperl_debug; /*...@unchecked@*/ extern int _rpmpython_debug; @@ -411,13 +413,17 @@ N_("Debug rpmio I/O"), NULL}, { "rpmiobdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmiob_debug, -1, N_("Debug rpmio I/O buffers"), NULL}, +#ifdef WITH_LUA + { "rpmluadebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmlua_debug, -1, + N_("Debug embedded Lua interpreter"), NULL}, +#endif { "rpmmgdebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmmg_debug, -1, N_("Debug rpmmg magic"), NULL}, #ifdef WITH_PERLEMBED { "rpmperldebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmperl_debug, -1, N_("Debug embedded Perl interpreter"), NULL}, #endif -#ifdef WITH_PYTHON +#ifdef WITH_PYTHONEMBED { "rpmpythondebug", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &_rpmpython_debug, -1, N_("Debug embedded Python interpreter"), NULL}, #endif @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmio.c ============================================================================ $ cvs diff -u -r1.183 -r1.184 rpmio.c --- rpm/rpmio/rpmio.c 7 Apr 2009 23:33:00 -0000 1.183 +++ rpm/rpmio/rpmio.c 8 Apr 2009 06:09:59 -0000 1.184 @@ -3127,6 +3127,8 @@ extern rpmioPool _htPool; /*...@=shadow@*/ extern rpmioPool _rpmmgPool; + extern rpmioPool _rpmluavPool; + extern rpmioPool _rpmluaPool; extern rpmioPool _rpmtclPool; extern rpmioPool _rpmperlPool; extern rpmioPool _rpmpythonPool; @@ -3155,6 +3157,10 @@ #if defined(WITH_TCL) _rpmtclPool = rpmioFreePool(_rpmtclPool); #endif +#if defined(WITH_LUA) + _rpmluavPool = rpmioFreePool(_rpmluavPool); + _rpmluaPool = rpmioFreePool(_rpmluaPool); +#endif _mirePool = rpmioFreePool(_mirePool); _rpmmgPool = rpmioFreePool(_rpmmgPool); _htPool = rpmioFreePool(_htPool); @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmlua.c ============================================================================ $ cvs diff -u -r2.68 -r2.69 rpmlua.c --- rpm/rpmio/rpmlua.c 1 Apr 2009 15:11:35 -0000 2.68 +++ rpm/rpmio/rpmlua.c 8 Apr 2009 06:09:59 -0000 2.69 @@ -45,6 +45,9 @@ /*...@access rpmiob @*/ +/*...@unchecked@*/ +int _rpmlua_debug = 0; + #if !defined(HAVE_VSNPRINTF) static inline int vsnprintf(char * buf, /*...@unused@*/ size_t nb, const char * fmt, va_list ap) @@ -83,10 +86,46 @@ /*...@=globstate@*/ } +void rpmluaFini(void * _lua) + /*...@globals globalLuaState @*/ + /*...@modifies globalLuaState @*/ +{ + rpmlua lua = _lua; + + if (lua->L) lua_close(lua->L); + lua->L = NULL; + lua->printbuf = _free(lua->printbuf); +} + +/*...@unchecked@*/ /*...@only@*/ /*...@null@*/ +rpmioPool _rpmluaPool; + +static rpmlua rpmluaGetPool(/*...@null@*/ rpmioPool pool) + /*...@globals _rpmluaPool, fileSystem @*/ + /*...@modifies pool, _rpmluaPool, fileSystem @*/ +{ + rpmlua lua; + + if (_rpmluaPool == NULL) { + _rpmluaPool = rpmioNewPool("lua", sizeof(*lua), -1, _rpmlua_debug, + NULL, NULL, rpmluaFini); + pool = _rpmluaPool; + } + return (rpmlua) rpmioGetPool(pool, sizeof(*lua)); +} + +void *rpmluaFree(rpmlua lua) +{ + if (lua == NULL) lua = globalLuaState; + (void)rpmioFreePoolItem((rpmioItem)lua, __FUNCTION__, __FILE__, __LINE__); + if (lua == globalLuaState) globalLuaState = NULL; + return NULL; +} + /*...@-globs -m...@*/ /* XXX hide rpmGlobalMacroContext mods for now. */ -rpmlua rpmluaNew() +rpmlua rpmluaNew(void) { - rpmlua lua = (rpmlua) xcalloc(1, sizeof(*lua)); + rpmlua lua = rpmluaGetPool(_rpmluaPool); lua_State *L = lua_open(); /*...@-readonlytrans -nullassign @*/ /*...@observer@*/ /*...@unchecked@*/ @@ -193,27 +232,10 @@ } path_buf = _free(path_buf); - return lua; + return ((rpmlua)rpmioLinkPoolItem((rpmioItem)lua, __FUNCTION__, __FILE__, __LINE__)); } /*...@=globs =m...@*/ -void *rpmluaFree(rpmlua lua) - /*...@globals globalLuaState @*/ - /*...@modifies globalLuaState @*/ -{ - if (lua == NULL) - lua = globalLuaState; - if (lua) { - if (lua->L) lua_close(lua->L); - lua->printbuf = _free(lua->printbuf); - if (lua == globalLuaState) globalLuaState = NULL; - lua = _free(lua); - } -/*...@-globstate@*/ - return NULL; -/*...@=globstate@*/ -} - void rpmluaSetData(rpmlua _lua, const char *key, const void *data) { INITSTATE(_lua, lua); @@ -452,16 +474,33 @@ lua_pop(lua->L, 1); } -rpmluav rpmluavNew(void) +void *rpmluavFree(rpmluav var) { - rpmluav var = (rpmluav) xcalloc(1, sizeof(*var)); - return var; + (void)rpmioFreePoolItem((rpmioItem)var, __FUNCTION__, __FILE__, __LINE__); + return NULL; } -void *rpmluavFree(rpmluav var) +/*...@unchecked@*/ /*...@only@*/ /*...@null@*/ +rpmioPool _rpmluavPool; + +static rpmluav rpmluavGetPool(/*...@null@*/ rpmioPool pool) + /*...@globals _rpmluavPool, fileSystem @*/ + /*...@modifies pool, _rpmluavPool, fileSystem @*/ { - var = _free(var); - return NULL; + rpmluav luav; + + if (_rpmluavPool == NULL) { + _rpmluavPool = rpmioNewPool("luav", sizeof(*luav), -1, _rpmlua_debug, + NULL, NULL, NULL); + pool = _rpmluavPool; + } + return (rpmluav) rpmioGetPool(pool, sizeof(*luav)); +} + +rpmluav rpmluavNew(void) +{ + rpmluav var = rpmluavGetPool(_rpmluavPool); + return ((rpmluav)rpmioLinkPoolItem((rpmioItem)var, __FUNCTION__, __FILE__, __LINE__)); } void rpmluavSetListMode(rpmluav var, int flag) @@ . patch -p0 <<'@@ .' Index: rpm/rpmio/rpmlua.h ============================================================================ $ cvs diff -u -r2.15 -r2.16 rpmlua.h --- rpm/rpmio/rpmlua.h 11 Dec 2008 21:55:14 -0000 2.15 +++ rpm/rpmio/rpmlua.h 8 Apr 2009 06:09:59 -0000 2.16 @@ -13,6 +13,7 @@ #include <lua.h> struct rpmlua_s { + struct rpmioItem_s _item; /*!< usage mutex and pool identifier. */ lua_State *L; int pushsize; int storeprint; @@ -23,6 +24,7 @@ }; struct rpmluav_s { + struct rpmioItem_s _item; /*!< usage mutex and pool identifier. */ rpmluavType keyType; rpmluavType valueType; union { @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org