unsigned len;
atomic_t nref;
- mutable RWLock crc_lock;
+ mutable simple_spinlock_t crc_spinlock;
map<pair<size_t, size_t>, pair<uint32_t, uint32_t> > crc_map;
raw(unsigned l)
: data(NULL), len(l), nref(0),
- crc_lock("buffer::raw::crc_lock", false)
+ crc_spinlock(SIMPLE_SPINLOCK_INITIALIZER)
{ }
raw(char *c, unsigned l)
: data(c), len(l), nref(0),
- crc_lock("buffer::raw::crc_lock", false)
+ crc_spinlock(SIMPLE_SPINLOCK_INITIALIZER)
{ }
virtual ~raw() {}
}
bool get_crc(const pair<size_t, size_t> &fromto,
pair<uint32_t, uint32_t> *crc) const {
- crc_lock.get_read();
+ simple_spin_lock(&crc_spinlock);
map<pair<size_t, size_t>, pair<uint32_t, uint32_t> >::const_iterator i =
crc_map.find(fromto);
if (i == crc_map.end()) {
- crc_lock.unlock();
+ simple_spin_unlock(&crc_spinlock);
return false;
}
*crc = i->second;
- crc_lock.unlock();
+ simple_spin_unlock(&crc_spinlock);
return true;
}
void set_crc(const pair<size_t, size_t> &fromto,
const pair<uint32_t, uint32_t> &crc) {
- crc_lock.get_write();
+ simple_spin_lock(&crc_spinlock);
crc_map[fromto] = crc;
- crc_lock.unlock();
+ simple_spin_unlock(&crc_spinlock);
}
void invalidate_crc() {
- // don't own the write lock when map is empty
- crc_lock.get_read();
+ simple_spin_lock(&crc_spinlock);
if (crc_map.size() != 0) {
- crc_lock.unlock();
- crc_lock.get_write();
crc_map.clear();
}
- crc_lock.unlock();
+ simple_spin_unlock(&crc_spinlock);
}
};