提交 4fa476e9 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

Merge conflicts

......@@ -13,7 +13,7 @@ struct buf : public rcu_freed {
u8 data[512];
buf() : rcu_freed("buf") {}
virtual ~buf() {}
virtual void do_gc() { delete this; }
};
#define B_BUSY 0x1 // buffer is locked by some process
#define B_VALID 0x2 // buffer has been read from disk
......
......@@ -14,3 +14,9 @@ operator delete(void *p)
{
kmfree(p);
}
extern "C" void
__cxa_pure_virtual(void)
{
panic("__cxa_pure_virtual");
}
......@@ -111,8 +111,9 @@ class range_delayed : public rcu_freed {
public:
range_delayed(range *e) : rcu_freed("range_delayed"), _e(e) {}
virtual ~range_delayed() {
virtual void do_gc() {
range_free(_e);
delete this;
}
};
......
......@@ -39,7 +39,8 @@ struct inode : public rcu_freed {
u32 addrs[NDIRECT+1];
inode();
virtual ~inode();
~inode();
virtual void do_gc() { delete this; }
};
#define I_BUSYR 0x1
......
......@@ -485,8 +485,9 @@ class diskblock : public rcu_freed {
public:
diskblock(int dev, u64 block) : rcu_freed("diskblock"), _dev(dev), _block(block) {}
virtual ~diskblock() {
virtual void do_gc() {
bfree(_dev, _block);
delete this;
}
};
......
......@@ -63,7 +63,7 @@ gc_free_tofreelist(rcu_freed **head, u64 epoch)
assert(0);
}
nr = r->_rcu_next;
delete r;
r->do_gc();
nfree++;
}
*head = r;
......
......@@ -16,5 +16,5 @@ class rcu_freed {
#endif
{}
virtual ~rcu_freed() {}
virtual void do_gc(void) = 0;
} __mpalign__;
......@@ -27,7 +27,7 @@ struct klockstat : public rcu_freed {
struct lockstat s;
klockstat(const char *name);
virtual ~klockstat() {}
virtual void do_gc() { delete this; }
};
#else
struct klockstat;
......
......@@ -26,7 +26,7 @@ class xelem : public rcu_freed {
K key;
xelem(const K &k, const V &v) : rcu_freed("xelem"), val(v), next_lock(0), next(0), key(k) {}
virtual ~xelem() {}
virtual void do_gc() { delete this; }
};
template<class K, class V>
......@@ -55,6 +55,10 @@ class xns : public rcu_freed {
panic("~xns: not empty");
}
virtual void do_gc() {
delete this;
}
u64 allockey() {
return __sync_fetch_and_add(&nextkey, 1);
}
......
......@@ -185,8 +185,9 @@ class delayedfree : public rcu_freed {
public:
delayedfree(proc *p) : rcu_freed("delayed proc free"), _p(p) {}
virtual ~delayedfree() {
virtual void do_gc() {
kmfree(_p);
delete this;
}
};
......
//#define TREE
#define TREE
#include "gc.hh"
......@@ -18,7 +18,9 @@ struct vma : public rcu_freed {
initlock(&lock, lockname, LOCKSTAT_VM);
}
virtual ~vma();
~vma();
virtual void do_gc() { delete this; }
};
// A memory object (physical pages or inode).
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论