| /** |
| * 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. |
| */ |
| |
| #include "PthreadMocks.h" |
| |
| MockPthreadsBase* MockPthreadsBase::mock_=0; |
| |
| #undef USING_DUMA |
| |
| #ifndef USING_DUMA |
| int pthread_cond_broadcast (pthread_cond_t *c){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_cond_broadcast(c); |
| return MockPthreadsBase::mock_->pthread_cond_broadcast(c); |
| } |
| int pthread_cond_destroy (pthread_cond_t *c){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_cond_destroy(c); |
| return MockPthreadsBase::mock_->pthread_cond_destroy(c); |
| } |
| int pthread_cond_init (pthread_cond_t *c, const pthread_condattr_t *a){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_cond_init(c,a); |
| return MockPthreadsBase::mock_->pthread_cond_init(c,a); |
| } |
| int pthread_cond_signal (pthread_cond_t *c){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_cond_signal(c); |
| return MockPthreadsBase::mock_->pthread_cond_signal(c); |
| } |
| int pthread_cond_timedwait (pthread_cond_t *c, |
| pthread_mutex_t *m, const struct timespec *t){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_cond_timedwait(c,m,t); |
| return MockPthreadsBase::mock_->pthread_cond_timedwait(c,m,t); |
| } |
| int pthread_cond_wait (pthread_cond_t *c, pthread_mutex_t *m){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_cond_wait(c,m); |
| return MockPthreadsBase::mock_->pthread_cond_wait(c,m); |
| } |
| int pthread_create (pthread_t *t, const pthread_attr_t *a, |
| void *(*f)(void *), void *d){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_create(t,a,f,d); |
| return MockPthreadsBase::mock_->pthread_create(t,a,f,d); |
| } |
| int pthread_detach(pthread_t t){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_detach(t); |
| return MockPthreadsBase::mock_->pthread_detach(t); |
| } |
| int pthread_join (pthread_t t, void **r){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_join(t,r); |
| return MockPthreadsBase::mock_->pthread_join(t,r); |
| } |
| int pthread_mutex_destroy (pthread_mutex_t *m){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_mutex_destroy(m); |
| return MockPthreadsBase::mock_->pthread_mutex_destroy(m); |
| } |
| int pthread_mutex_init (pthread_mutex_t *m, const pthread_mutexattr_t *a){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_mutex_init(m,a); |
| return MockPthreadsBase::mock_->pthread_mutex_init(m,a); |
| } |
| |
| DECLARE_WRAPPER(int,pthread_mutex_lock,(pthread_mutex_t *m)){ |
| if(!MockPthreadsBase::mock_) |
| return CALL_REAL(pthread_mutex_lock,(m)); |
| return MockPthreadsBase::mock_->pthread_mutex_lock(m); |
| } |
| |
| int pthread_mutex_trylock (pthread_mutex_t *m){ |
| if(!MockPthreadsBase::mock_) |
| return LIBC_SYMBOLS.pthread_mutex_trylock(m); |
| return MockPthreadsBase::mock_->pthread_mutex_trylock(m); |
| } |
| |
| DECLARE_WRAPPER(int,pthread_mutex_unlock,(pthread_mutex_t *m)){ |
| if(!MockPthreadsBase::mock_) |
| return CALL_REAL(pthread_mutex_unlock,(m)); |
| return MockPthreadsBase::mock_->pthread_mutex_unlock(m); |
| } |
| #endif |
| |
| CheckedPthread::ThreadMap CheckedPthread::tmap_; |
| CheckedPthread::MutexMap CheckedPthread::mmap_; |
| CheckedPthread::CVMap CheckedPthread::cvmap_; |
| Mutex CheckedPthread::mx; |