Skip to content

Instantly share code, notes, and snippets.

@Lazin
Created November 25, 2013 15:03
Show Gist options
  • Save Lazin/7642571 to your computer and use it in GitHub Desktop.
Save Lazin/7642571 to your computer and use it in GitHub Desktop.
Однажды, я написал вот такой код :)
apr_pool_t* mem_pool_; //< local memory pool
apr_mmap_t *mmap_;
apr_file_t *fp_;
apr_finfo_t finfo_;
static log4cxx::LoggerPtr s_logger_;
PersistentPageManager(const char* file_name) {
AprStatusChecker status; // status.count increments on each assign
try {
status = apr_pool_create(&mem_pool_, NULL);
status = apr_file_open(&fp_, file_name, APR_WRITE|APR_READ, APR_OS_DEFAULT, mem_pool_);
status = apr_file_info_get(&finfo_, APR_FINFO_SIZE, fp_);
status = apr_mmap_create(&mmap_, fp_, 0, finfo_.size, APR_MMAP_WRITE|APR_MMAP_READ, mem_pool_);
}
catch(AprException const& err) {
free_resources(status.count);
LOG4CXX_ERROR(s_logger_, "Can't create PersistentPageManager, error " << err << " on step " << status.count);
throw;
}
}
void free_resources(int cnt)
{
switch(cnt)
{
default:
case 4:
apr_mmap_delete(mmap_);
case 3:
case 2:
apr_file_close(fp_);
case 1:
apr_pool_destroy(mem_pool_);
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment