Author: tridge Date: 2005-08-07 15:45:59 +0000 (Sun, 07 Aug 2005) New Revision: 9183
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9183 Log: more workarounds for the global variables in ejs. I will discuss getting rid of these with the mbedthis people. Modified: branches/SAMBA_4_0/source/lib/appweb/ejs/ejs.h branches/SAMBA_4_0/source/lib/appweb/ejs/ejsLib.c branches/SAMBA_4_0/source/web_server/http.c Changeset: Modified: branches/SAMBA_4_0/source/lib/appweb/ejs/ejs.h =================================================================== --- branches/SAMBA_4_0/source/lib/appweb/ejs/ejs.h 2005-08-07 15:33:50 UTC (rev 9182) +++ branches/SAMBA_4_0/source/lib/appweb/ejs/ejs.h 2005-08-07 15:45:59 UTC (rev 9183) @@ -71,6 +71,9 @@ extern EjsId ejsOpenEngine(EjsHandle primaryHandle, EjsHandle altHandle); extern void ejsCloseEngine(EjsId eid); +void *ejs_save_state(void); +void ejs_restore_state(void *ptr); + /* * Evaluation functions */ Modified: branches/SAMBA_4_0/source/lib/appweb/ejs/ejsLib.c =================================================================== --- branches/SAMBA_4_0/source/lib/appweb/ejs/ejsLib.c 2005-08-07 15:33:50 UTC (rev 9182) +++ branches/SAMBA_4_0/source/lib/appweb/ejs/ejsLib.c 2005-08-07 15:45:59 UTC (rev 9183) @@ -58,6 +58,33 @@ #define ejsUnlock() #endif + +/* + save/restore global ejs state - used to cope with simultaneous ejs requests + this is a workaround for the use of global variables in ejs +*/ +struct ejs_state_ctx { + struct MprVar master; + struct MprArray *ejsList; +}; + +void *ejs_save_state(void) +{ + struct ejs_state_ctx *ctx = talloc(talloc_autofree_context(), struct ejs_state_ctx); + ctx->master = master; + ctx->ejsList = ejsList; + return ctx; +} + +void ejs_restore_state(void *ptr) +{ + struct ejs_state_ctx *ctx = talloc_get_type(ptr, struct ejs_state_ctx); + master = ctx->master; + ejsList = ctx->ejsList; + talloc_free(ctx); +} + + /****************************** Forward Declarations **************************/ static char *getNextVarToken(char **next, char *tokBuf, int tokBufLen); Modified: branches/SAMBA_4_0/source/web_server/http.c =================================================================== --- branches/SAMBA_4_0/source/web_server/http.c 2005-08-07 15:33:50 UTC (rev 9182) +++ branches/SAMBA_4_0/source/web_server/http.c 2005-08-07 15:45:59 UTC (rev 9183) @@ -752,6 +752,7 @@ struct esp_data *edata = talloc_get_type(web->task->private, struct esp_data); char *p; void *save_mpr_ctx = mprMemCtx(); + void *ejs_save = ejs_save_state(); int i; const char *file_type = NULL; BOOL esp_enable = False; @@ -802,6 +803,7 @@ if (web->input.url == NULL) { http_error(web, 400, "You must specify a GET or POST request"); mprSetCtx(save_mpr_ctx); + ejs_restore_state(ejs_save); return; } @@ -811,6 +813,7 @@ if (!NT_STATUS_IS_OK(status)) { http_error(web, 400, "Malformed POST data"); mprSetCtx(save_mpr_ctx); + ejs_restore_state(ejs_save); return; } } @@ -819,6 +822,7 @@ if (!NT_STATUS_IS_OK(status)) { http_error(web, 400, "Malformed GET data"); mprSetCtx(save_mpr_ctx); + ejs_restore_state(ejs_save); return; } } @@ -899,6 +903,7 @@ talloc_free(esp); mprSetCtx(save_mpr_ctx); + ejs_restore_state(ejs_save); return; internal_error: @@ -906,6 +911,7 @@ talloc_free(esp); http_error(web, 500, "Internal server error"); mprSetCtx(save_mpr_ctx); + ejs_restore_state(ejs_save); }
