summaryrefslogtreecommitdiff
path: root/subversion/bindings/javahl/native/JNIThreadData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/bindings/javahl/native/JNIThreadData.cpp')
-rw-r--r--subversion/bindings/javahl/native/JNIThreadData.cpp169
1 files changed, 0 insertions, 169 deletions
diff --git a/subversion/bindings/javahl/native/JNIThreadData.cpp b/subversion/bindings/javahl/native/JNIThreadData.cpp
deleted file mode 100644
index e3ce334..0000000
--- a/subversion/bindings/javahl/native/JNIThreadData.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/**
- * @copyright
- * ====================================================================
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you 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.
- * ====================================================================
- * @endcopyright
- *
- * @file JNIThreadData.cpp
- * @brief Implementation of the class JNIThreadData
- */
-
-#include "JNIThreadData.h"
-#include <apr_strings.h>
-#include <apr_tables.h>
-#include <apr_general.h>
-#include <apr_lib.h>
-#include <apr_thread_proc.h>
-#include "JNIUtil.h"
-
-apr_threadkey_t *JNIThreadData::g_key;
-
-/**
- * Create and initialize a new object.
- */
-JNIThreadData::JNIThreadData()
-{
- m_env = NULL;
- m_exceptionThrown = false;
- m_previous = NULL;
-}
-
-JNIThreadData::~JNIThreadData()
-{
-}
-
-/**
- * Initialize the thread local storage.
- * @return success or failure
- */
-bool JNIThreadData::initThreadData()
-{
- // If already initialized -> nothing to do.
- if (g_key != NULL)
- return false;
-
- // Request a key for the thread local storage from the global pool
- // and register a callback function called when the thread is
- // deleted.
- apr_status_t apr_err = apr_threadkey_private_create(&g_key,
- del,
- JNIUtil::getPool());
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_create");
- return false;
- }
-
- return true;
-}
-
-/**
- * Get the thread local storage for this thread.
- * @return thread local storage
- */
-JNIThreadData *JNIThreadData::getThreadData()
-{
- // We should never be called before initThreadData
- if (g_key == NULL)
- return NULL;
-
- // Retrieve the thread local storage from APR.
- JNIThreadData *data = NULL;
- apr_status_t apr_err = apr_threadkey_private_get
- (reinterpret_cast<void**>(&data), g_key);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_get");
- return NULL;
- }
-
- // Not already allocated.
- if (data == NULL)
- {
- // Allocate and store to APR.
- data = new JNIThreadData;
- apr_err = apr_threadkey_private_set (data, g_key);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
- return NULL;
- }
- }
- return data;
-}
-
-/**
- * Allocate a new ThreadData for the current call from Java and push
- * it on the stack
- */
-void JNIThreadData::pushNewThreadData()
-{
- JNIThreadData *data = NULL;
- apr_status_t apr_err = apr_threadkey_private_get
- (reinterpret_cast<void**>(&data), g_key);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_get");
- return;
- }
- JNIThreadData *newData = new JNIThreadData();
- newData->m_previous =data;
- apr_err = apr_threadkey_private_set(newData, g_key);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
- return;
- }
-}
-
-/**
- * Pop the current ThreadData from the stack, because the call
- * completed.
- */
-void JNIThreadData::popThreadData()
-{
- JNIThreadData *data = NULL;
- apr_status_t apr_err = apr_threadkey_private_get
- (reinterpret_cast<void**>(&data), g_key);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_get");
- return;
- }
- if (data == NULL)
- return;
-
- JNIThreadData *oldData = data->m_previous;
- delete data;
- apr_err = apr_threadkey_private_set(oldData, g_key);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, "apr_threadkey_private_set");
- return;
- }
-}
-
-/**
- * Callback called by APR when the thread dies. Deletes the thread
- * local storage.
- */
-void JNIThreadData::del(void *p)
-{
- delete reinterpret_cast<JNIThreadData*>(p);
-}