@@ -237,10 +237,10 @@ void rest_start(void *arg) {
237
237
238
238
}
239
239
240
- SEXP nano_eval_res ;
240
+ static SEXP nano_parse_eval_res ;
241
241
242
242
void parse_eval_safe (void * data ) {
243
- nano_eval_res = R_ParseEvalString ((const char * ) data , R_GlobalEnv );
243
+ nano_parse_eval_res = R_ParseEvalString ((const char * ) data , R_GlobalEnv );
244
244
}
245
245
246
246
void inproc_server (const char * url ) {
@@ -252,27 +252,25 @@ void inproc_server(const char* url) {
252
252
if ((xc = nng_rep0_open (& s )) || (xc = nng_listen (s , url , NULL , 0 )))
253
253
fatal ("unable to set up inproc" , xc );
254
254
255
- nano_eval_res = R_BlankScalarString ;
256
-
257
255
for (;;) {
258
256
if ((xc = nng_recvmsg (s , & msg , 0 )))
259
257
fatal ("inproc recvmsg" , xc );
260
258
261
259
const char * body = nng_msg_body (msg );
262
260
nano_buf buf ;
263
261
262
+ nano_parse_eval_res = R_BlankScalarString ;
264
263
R_ToplevelExec (parse_eval_safe , (void * ) body );
265
264
266
- if (TYPEOF (nano_eval_res ) == STRSXP ) {
267
- const char * string = NANO_STRING (nano_eval_res );
265
+ if (TYPEOF (nano_parse_eval_res ) == STRSXP ) {
266
+ const char * string = NANO_STRING (nano_parse_eval_res );
268
267
buf .buf = (unsigned char * ) string ;
269
268
buf .cur = strlen (string );
270
269
} else {
271
- nano_serialize (& buf , nano_eval_res , R_NilValue );
270
+ nano_serialize (& buf , nano_parse_eval_res , R_NilValue );
272
271
}
273
272
nng_msg_clear (msg );
274
273
nng_msg_append (msg , buf .buf , buf .cur );
275
- nano_eval_res = R_BlankScalarString ;
276
274
if ((xc = nng_sendmsg (s , msg , 0 )))
277
275
fatal ("inproc sendmsg" , xc );
278
276
0 commit comments