Browse Source

add iob_addbuf_munmap

master
Felix von Leitner 14 years ago
parent
commit
17d867ddb6
  1. 1
      CHANGES
  2. 5
      io/iob_addbuf_munmap.c
  3. 13
      io/iob_reset.c
  4. 2
      io/iob_send.c
  5. 1
      iob.h
  6. 2
      iob_internal.h

1
CHANGES

@ -1,5 +1,6 @@
0.27:
add fmt_strm
add iob_addbuf_munmap
0.26:
fix really pathological case where io_timeouted would never

5
io/iob_addbuf_munmap.c

@ -0,0 +1,5 @@
#include "iob_internal.h"
int iob_addbuf_free(io_batch* b,const void* buf,uint64 n) {
return iob_addbuf_internal(b,buf,n,2);
}

13
io/iob_reset.c

@ -1,4 +1,5 @@
#include <stdlib.h>
#include <sys/mman.h>
#include "byte.h"
#include "iob_internal.h"
@ -7,10 +8,18 @@ void iob_reset(io_batch* b) {
iob_entry* x=array_start(&b->b);
l=array_length(&b->b,sizeof(iob_entry));
for (i=0; i<l; ++i) {
if (x[i].type==FROMBUF_FREE)
switch (x[i].type) {
case FROMBUF_FREE:
free((char*)x[i].buf);
if (x[i].type==FROMFILE_CLOSE)
break;
case FROMBUF_MUNMAP:
munmap((char*)x[i].buf,x[i].n);
break;
case FROMFILE_CLOSE:
io_close(x[i].fd);
default:
break;
}
}
array_reset(&b->b);
byte_zero(b,sizeof(*b));

2
io/iob_send.c

@ -45,7 +45,7 @@ int64 iob_send(int64 s,io_batch* b) {
for (i=0; x+i<last; ++i)
if (x[i].n) break;
if (x[i].type==FROMBUF || x[i].type==FROMBUF_FREE) {
if (x[i].type==FROMBUF || x[i].type==FROMBUF_FREE || x[i].type==FROMBUF_MUNMAP) {
fprintf(stderr,"found non-sent buffer batch entry at %d\n",i);
if (x+i+1 < last &&
(x[i+1].type==FROMFILE || x[i+1].type==FROMFILE_CLOSE)) {

1
iob.h

@ -24,6 +24,7 @@ typedef struct io_batch {
io_batch* iob_new(int hint_entries);
int iob_addbuf(io_batch* b,const void* buf,uint64 n);
int iob_addbuf_free(io_batch* b,const void* buf,uint64 n);
int iob_addbuf_munmap(io_batch* b,const void* buf,uint64 n);
int iob_adds(io_batch* b,const char* s);
int iob_adds_free(io_batch* b,const char* s);
int iob_addfile(io_batch* b,int64 fd,uint64 off,uint64 n);

2
iob_internal.h

@ -2,7 +2,7 @@
#include "array.h"
typedef struct iob_entry {
enum { FROMBUF, FROMBUF_FREE, FROMFILE, FROMFILE_CLOSE } type;
enum { FROMBUF, FROMBUF_FREE, FROMBUF_MUNMAP, FROMFILE, FROMFILE_CLOSE } type;
int64 fd;
const char* buf;
uint64 offset,n;

Loading…
Cancel
Save