diff options
Diffstat (limited to 'server/data_stream.c')
-rw-r--r-- | server/data_stream.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/server/data_stream.c b/server/data_stream.c index e86114e..3d25104 100644 --- a/server/data_stream.c +++ b/server/data_stream.c @@ -33,6 +33,7 @@ static void write_data_fd(u8 *data,i64 len,void *fdp){ } cursor+=nwr; } + fprintf(stderr,"write_data_fd(len=%" PRIi64 ")\n",len); } static void bufappend(u8 **buf,i64 *cursor,i64 *cap,u8 *data,i64 datalen){ @@ -103,15 +104,21 @@ int data_stream_frame(struct data_stream *s){ s->pids=realloc(s->pids,s->pidbufsize,pid_t); numpids=proc_listallpids(s->pids,s->pidbufsize*sizeof(pid_t)); } - serialise8(buf8,numpids); + + // correct value will be written later + i64 numpids_buf_cursor=s->cursor; bufappend(&s->writebuf,&s->cursor,&s->writebufsize,buf8,8); + i64 nfailed=0; for(i64 index=0;index<numpids;index++) { pid_t pid=s->pids[index]; struct proc_taskinfo info; int result=proc_pidinfo(pid,PROC_PIDTASKINFO,0,&info,sizeof(info)); - if(result!=sizeof info)continue; + if(result!=sizeof info){ + nfailed++; + continue; + } serialise4(buf8,pid); bufappend(&s->writebuf,&s->cursor,&s->writebufsize,buf8,4); @@ -126,7 +133,7 @@ int data_stream_frame(struct data_stream *s){ s->namebuf[0]='\0'; } - fprintf(stderr,"index=%" PRIi64 " pid=%d namelen=%zu\n",index,pid,namelen); + // fprintf(stderr,"pi=%" PRIi64 " pid=%d namelen=%zu\n",index-nfailed,pid,namelen); serialise8(buf8,namelen); bufappend(&s->writebuf,&s->cursor,&s->writebufsize,buf8,8); bufappend(&s->writebuf,&s->cursor,&s->writebufsize,s->namebuf,namelen); @@ -141,7 +148,12 @@ int data_stream_frame(struct data_stream *s){ // fprintf(stderr,"PID %u (%s): %llu %llu %llu\n",pid,namebuf,info.pti_total_user,info.pti_total_system,info.pti_resident_size); } + numpids-=nfailed; + serialise8(buf8,numpids); + memcpy(s->writebuf+numpids_buf_cursor,buf8,8); + zbuffer_write(s->z,s->writebuf,s->cursor); + // fprintf(stderr,"zbuffer_write(cursor=%" PRIi64 ")\n",s->cursor); s->cursor=0; if(callback_error)return -1; |