diff options
author | Alan Conway <aconway@apache.org> | 2006-11-01 01:19:12 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2006-11-01 01:19:12 +0000 |
commit | dda71d21e76e01918ebec2d80dd8e077f94216e0 (patch) | |
tree | 79283c295e00de1eee8d98d4fd9b781db8497c28 /cpp/src_apr/qpid/concurrent/APRBase.h | |
parent | 9094d2b10ecadd66fa3b22169183e7573cc79629 (diff) | |
download | qpid-python-dda71d21e76e01918ebec2d80dd8e077f94216e0.tar.gz |
Moved APR specific sources into src_apr.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@469738 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src_apr/qpid/concurrent/APRBase.h')
-rw-r--r-- | cpp/src_apr/qpid/concurrent/APRBase.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/cpp/src_apr/qpid/concurrent/APRBase.h b/cpp/src_apr/qpid/concurrent/APRBase.h new file mode 100644 index 0000000000..f3ff0f89c1 --- /dev/null +++ b/cpp/src_apr/qpid/concurrent/APRBase.h @@ -0,0 +1,63 @@ +/* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +#ifndef _APRBase_ +#define _APRBase_ + +#include <string> +#include "apr-1/apr_thread_mutex.h" +#include "apr-1/apr_errno.h" + +namespace qpid { +namespace concurrent { + + /** + * Use of APR libraries necessitates explicit init and terminate + * calls. Any class using APR libs should obtain the reference to + * this singleton and increment on construction, decrement on + * destruction. This class can then correctly initialise apr + * before the first use and terminate after the last use. + */ + class APRBase{ + static APRBase* instance; + apr_pool_t* pool; + apr_thread_mutex_t* mutex; + int count; + + APRBase(); + ~APRBase(); + static APRBase* getInstance(); + bool _increment(); + void _decrement(); + public: + static void increment(); + static void decrement(); + }; + + //this is also a convenient place for a helper function for error checking: + void check(apr_status_t status, const std::string& file, const int line); + std::string get_desc(apr_status_t status); + +#define CHECK_APR_SUCCESS(A) check(A, __FILE__, __LINE__); + +} +} + + + + +#endif |