1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-27 03:21:53 +03:00

r9183: more workarounds for the global variables in ejs. I will discuss getting rid of these

with the mbedthis people.
(This used to be commit a5b9e74a5c)
This commit is contained in:
Andrew Tridgell 2005-08-07 15:45:59 +00:00 committed by Gerald (Jerry) Carter
parent 9811a3981b
commit a663d21106
3 changed files with 36 additions and 0 deletions

View File

@ -71,6 +71,9 @@ extern void ejsClose(void);
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
*/

View File

@ -58,6 +58,33 @@ static void *lockData;
#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);

View File

@ -752,6 +752,7 @@ void http_process_input(struct websrv_context *web)
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 @@ void http_process_input(struct websrv_context *web)
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 @@ void http_process_input(struct websrv_context *web)
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 @@ void http_process_input(struct websrv_context *web)
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 @@ void http_process_input(struct websrv_context *web)
talloc_free(esp);
mprSetCtx(save_mpr_ctx);
ejs_restore_state(ejs_save);
return;
internal_error:
@ -906,6 +911,7 @@ internal_error:
talloc_free(esp);
http_error(web, 500, "Internal server error");
mprSetCtx(save_mpr_ctx);
ejs_restore_state(ejs_save);
}