;  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.

LIBRARY HYTHR

EXPORTS
 
hythread_detach
hythread_detach_ex
hythread_uses_fast_tls
hythread_tls_alloc
hythread_sleep_interruptable
hythread_cancel
hythread_monitor_enter
hythread_monitor_notify_all
hythread_attach
hythread_attach_ex
hythread_monitor_destroy
hythread_monitor_num_waiting
hythread_interrupted
hythread_park
hythread_monitor_init_with_name
hythread_monitor_try_enter
hythread_self
hythread_set_self
hythread_self_slow
hythread_tls_free
hythread_yield
hythread_yield_other
hythread_suspend
hythread_interrupt
hythread_tls_set
hythread_create
hythread_monitor_wait
hythread_monitor_wait_interruptable
hythread_monitor_exit
hythread_set_priority
hythread_unpark
hythread_sleep
hythread_global
hythread_tls_alloc_with_finalizer
hythread_monitor_wait_timed
hythread_resume
hythread_monitor_notify
hythread_get_priority
hythread_tls_get
hythread_tls_get_request_offset
hythread_tls_get_offset
hythread_get_hythread_offset_in_tls
hythread_get_struct_size
hythread_global_lock
hythread_global_unlock
hythread_create_ex
hythread_clear_interrupted_other
hythread_get_self_id
hythread_get_id
hythread_get_thread
hythread_get_thread_times
hythread_struct_init
hythread_cancel_all
hythread_group_create
hythread_group_release
hythread_group_get_list
hythread_set_to_group
hythread_is_suspend_enabled
hythread_suspend_enable
hythread_suspend_disable
hythread_exception_safe_point
hythread_safe_point
hythread_safe_point_other
hythread_send_suspend_request
hythread_suspend_other
hythread_set_safepoint_callback
hythread_suspend_all
hythread_resume_all
hythread_iterator_create
hythread_iterator_release
hythread_iterator_reset
hythread_iterator_next
hythread_iterator_has_next
hythread_iterator_size
hythread_thin_monitor_create
hythread_thin_monitor_enter
hythread_thin_monitor_try_enter
hythread_thin_monitor_exit
hythread_thin_monitor_release
hythread_thin_monitor_wait
hythread_thin_monitor_wait_timed
hythread_thin_monitor_wait_interruptable
hythread_thin_monitor_notify
hythread_thin_monitor_notify_all
hythread_thin_monitor_destroy
hythread_thin_monitor_get_owner
hythread_native_resource_is_live
hythread_reclaim_resources

hythread_suspend_thread_native
hythread_resume_thread_native
hythread_get_suspend_count_native
hythread_get_thread_context
hythread_set_thread_context

hysem_post
hysem_wait
hysem_destroy
hycond_create
hycond_wait
hycond_wait_timed
hycond_wait_timed_raw
hycond_wait_interruptable
hycond_notify
hycond_notify_all
hycond_destroy
hylatch_create
hylatch_wait
hylatch_wait_timed
hylatch_wait_interruptable
hylatch_set
hylatch_count_down
hylatch_get_count
hylatch_destroy
hysem_create
hysem_wait_timed
hysem_wait_interruptable
hysem_getvalue
hysem_set

hythread_is_alive
hythread_is_terminated
hythread_init
hythread_shutdown
hythread_shutdowning
hythread_lib_state
hythread_lib_create
hythread_lib_destroy
hythread_lib_lock
hythread_lib_unlock

hythread_inflate_lock
hythread_is_fat_lock
hythread_owns_thin_lock
hythread_unreserve_lock
hythread_set_suspend_disable
hythread_reset_suspend_disable
hythread_is_blocked_on_monitor_enter
hythread_is_waiting
hythread_is_in_native
hythread_is_suspended
hythread_is_parked
hythread_is_in_monitor_wait
hythread_is_sleeping
hythread_is_waiting_with_timeout
hythread_is_waiting_indefinitely
hythread_is_runnable
hythread_thin_monitor_get_recursion
hythread_exit
get_java_thread_group
tm_properties

hythread_thread_lock
hythread_thread_unlock
hythread_get_state
hythread_set_state
hythread_get_thread_id_offset
hythread_set_thread_stop_callback
hythread_wait_for_nondaemon_threads
hythread_increase_nondaemon_threads_count
hythread_decrease_nondaemon_threads_count
