From d77281680b96dad90a774998cc759dd676954806 Mon Sep 17 00:00:00 2001 From: tomsmeding Date: Thu, 6 Jul 2017 15:31:44 +0200 Subject: server: Fix multithreading with firebase --- firebase.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'firebase.c') diff --git a/firebase.c b/firebase.c index 5221af7..641dafe 100644 --- a/firebase.c +++ b/firebase.c @@ -1,6 +1,7 @@ #include #include #include +#include #include #include "db.h" #include "firebase.h" @@ -33,7 +34,12 @@ static void script_output_listener(FILE *js_read){ char *line=NULL; size_t linecap=0; ssize_t linelen; - while((linelen=getline(&line,&linecap,js_read))>0){ + while(true){ + linelen=getline(&line,&linecap,js_read); + if(linelen<0){ + if(errno==EINTR)continue; + break; + } if(line[linelen-1]!='\n'){ fprintf(stderr,"firebase thread: unexpected EOF from js script\n"); return; @@ -60,8 +66,10 @@ static void script_output_listener(FILE *js_read){ } if(strcmp(cmd,"add_token")==0){ + fprintf(stderr,"firebase thread: adding token '%s' to %" PRIi64 "\n",token,userid); db_add_token(userid,token); } else { + fprintf(stderr,"firebase thread: deleting token '%s' from %" PRIi64 "\n",token,userid); db_delete_token(userid,token); } } @@ -71,6 +79,14 @@ static void script_output_listener(FILE *js_read){ invalid_line: fprintf(stderr,"firebase thread: Invalid line from js script: <%s>\n",line); } + + if(linelen<0){ + if(feof(js_read)){ + fprintf(stderr,"firebase thread: feof(js_read)\n"); + } else { + fprintf(stderr,"firebase thread: getline: errno = %d (%s)\n",errno,strerror(errno)); + } + } } @@ -106,6 +122,7 @@ void firebase_init(void){ if(pid==0){ close(wrpipe[1]); FILE *js_read=fdopen(rdpipe[0],"r"); + db_reinit(); script_output_listener(js_read); fclose(js_read); exit(0); -- cgit v1.2.3-54-g00ecf