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:
parent
9811a3981b
commit
a663d21106
@ -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
|
||||
*/
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user