more work

git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@17 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2004-06-15 15:18:33 +00:00
parent 98f41f1e70
commit 78f386ad45
19 changed files with 269 additions and 201 deletions

View file

@ -1,15 +1,22 @@
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>
#include "memblock.h"
unsigned n_blocks = 0;
struct memblock *memblock_new(size_t length) {
struct memblock *b = malloc(sizeof(struct memblock)+length);
b->type = MEMBLOCK_APPENDED;
b->ref = 1;
b->length = length;
b->data = b+1;
n_blocks++;
timerclear(&b->stamp);
return b;
}
@ -19,6 +26,8 @@ struct memblock *memblock_new_fixed(void *d, size_t length) {
b->ref = 1;
b->length = length;
b->data = d;
n_blocks++;
timerclear(&b->stamp);
return b;
}
@ -28,6 +37,8 @@ struct memblock *memblock_new_dynamic(void *d, size_t length) {
b->ref = 1;
b->length = length;
b->data = d;
n_blocks++;
timerclear(&b->stamp);
return b;
}
@ -45,6 +56,7 @@ void memblock_unref(struct memblock*b) {
if (b->type == MEMBLOCK_DYNAMIC)
free(b->data);
free(b);
n_blocks--;
}
}
@ -65,3 +77,29 @@ void memblock_unref_fixed(struct memblock *b) {
b->type = MEMBLOCK_DYNAMIC;
}
void memblock_stamp(struct memblock*b) {
assert(b);
gettimeofday(&b->stamp, NULL);
}
uint32_t memblock_age(struct memblock*b) {
assert(b);
struct timeval tv;
uint32_t r;
if (b->stamp.tv_sec == 0)
return (suseconds_t) -1;
gettimeofday(&tv, NULL);
/*fprintf(stderr, "memblock: (%lu,%lu) -- (%lu,%lu)\r", b->stamp.tv_sec, b->stamp.tv_usec, tv.tv_sec, tv.tv_usec);*/
r = (tv.tv_sec-b->stamp.tv_sec) * 1000000;
if (tv.tv_usec >= b->stamp.tv_usec)
r += tv.tv_usec - b->stamp.tv_usec;
else
r -= b->stamp.tv_usec - tv.tv_usec;
return r;
}