version 1.4.58b
[polyglot.git] / engine.c
index 5cfea07..af6555a 100644 (file)
--- a/engine.c
+++ b/engine.c
@@ -51,12 +51,26 @@ void engine_send(engine_t * engine, const char *format, ...) {
 \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