summaryrefslogtreecommitdiff
path: root/server/data_stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/data_stream.c')
-rw-r--r--server/data_stream.c18
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;