bool CSqlLogger::write_log(const std::string& sql) { try { int32_t length = static_cast<int32_t>(sql.size()); sys::LockHelper<sys::CLock> lock_helper(_lock); if ((-1 == _log_fd) || need_rotate()) { rotate_log(); } if (-1 == _log_fd) { return false; } struct iovec iov[2]; iov[0].iov_base = &length; iov[0].iov_len = sizeof(length); iov[1].iov_base = const_cast<char*>(sql.data()); iov[1].iov_len = sql.size(); ssize_t bytes_written = writev(_log_fd, iov, sizeof(iov)/sizeof(iov[0])); if (bytes_written != static_cast<int>(iov[0].iov_len+iov[1].iov_len)) { const int errcode = errno; THROW_SYSCALL_EXCEPTION(utils::CStringUtils::format_string("writev %s error: %s", _log_filepath.c_str(), sys::Error::to_string(errcode).c_str()), errcode, "writev"); } // 计数 ++_total_lines; const int32_t lines = argument::lines->value(); if ((lines > 0) && (++_num_lines >= lines)) { _num_lines = 0; if (-1 == fdatasync(_log_fd)) { const int errcode = errno; THROW_SYSCALL_EXCEPTION(utils::CStringUtils::format_string("fdatasync %s error: %s", _log_filepath.c_str(), sys::Error::to_string(errcode).c_str()), errno, "fdatasync"); } } return true; } catch (sys::CSyscallException& ex) { MYLOG_ERROR("[%s] write [%s] to [%s] failed: %s\n", _dbinfo->str().c_str(), sql.c_str(), _log_filepath.c_str(), ex.str().c_str()); return false; } }
bool CThreadMemPool::reclaim(void* bucket) throw (CSyscallException) { LockHelper<CLock> lock_helper(_lock); return _raw_mem_pool.reclaim(bucket); }
void* CThreadMemPool::allocate() throw (CSyscallException) { LockHelper<CLock> lock_helper(_lock); return _raw_mem_pool.allocate(); }
void CThreadMemPool::create(uint16_t bucket_size, uint32_t bucket_number, bool use_heap, uint8_t guard_size, char guard_flag) throw (CSyscallException) { LockHelper<CLock> lock_helper(_lock); _raw_mem_pool.create(bucket_size, bucket_number, use_heap, guard_size, guard_flag); }
void CThreadMemPool::destroy() throw (CSyscallException) { LockHelper<CLock> lock_helper(_lock); _raw_mem_pool.destroy(); }
P1 (PUBLIC pascal trap, OSErr, FSpRstFLock, FSSpecPtr, spec) { return lock_helper (spec, PBHRstFLock); }
bool CThreadMemPool::reclaim(void* bucket) { LockHelper<CLock> lock_helper(_lock); return _raw_mem_pool.reclaim(bucket); }
void* CThreadMemPool::allocate() { LockHelper<CLock> lock_helper(_lock); return _raw_mem_pool.allocate(); }
void CThreadMemPool::destroy() { LockHelper<CLock> lock_helper(_lock); _raw_mem_pool.destroy(); }