\r
void engine_close(engine_t * engine){\r
char string[StringSize];\r
+ int elapsed_time;\r
+ int ret;\r
+ int close_timeout=500;\r
+ my_log("POLYGLOT Closing engine.\n");\r
pipex_send_eof(engine->pipex);\r
// TODO: Timeout\r
- while (!engine_eof(engine)) { \r
- engine_get(engine,string);\r
+\r
+ elapsed_time=0;\r
+ while (!engine_eof(engine) && (elapsed_time<close_timeout)) { \r
+ ret=engine_get_non_blocking(engine,string);\r
+ if(!ret && !engine_eof(engine)){\r
+ my_log("POLYGLOT Engine does not reply. Sleeping %dms.\n", WAIT_GRANULARITY);\r
+ my_sleep(WAIT_GRANULARITY);\r
+ elapsed_time+=WAIT_GRANULARITY;\r
+ }\r
+ }\r
+ if(elapsed_time>=close_timeout){\r
+ my_log("POLYGLOT Waited more than %dms. Moving on.\n",close_timeout); \r
}\r
- pipex_exit(engine->pipex);\r
+ pipex_exit(engine->pipex,200);\r
}\r
\r
// engine_open()\r