Ack.
Thanks,
Ramesh.
On 11/8/2016 8:50 PM, Anders Widell wrote:
> osaf/libs/core/cplusplus/base/process.cc | 31
> ++++++++++++++++-----------
> osaf/libs/core/cplusplus/base/process.h | 19 +++++++++--------
> osaf/libs/core/cplusplus/base/unix_socket.cc | 17 +-------------
> osaf/libs/core/cplusplus/base/unix_socket.h | 3 +-
> 4 files changed, 32 insertions(+), 38 deletions(-)
>
>
> Use the new Mutex and Lock classes instead of std::mutex, std::unique_lock and
> pthread_mutex_t.
>
> diff --git a/osaf/libs/core/cplusplus/base/process.cc
> b/osaf/libs/core/cplusplus/base/process.cc
> --- a/osaf/libs/core/cplusplus/base/process.cc
> +++ b/osaf/libs/core/cplusplus/base/process.cc
> @@ -50,10 +50,12 @@ Process::~Process() {
> }
>
> void Process::Kill(int sig_no, const Duration& wait_time) {
> - std::unique_lock<std::mutex> lock(mutex_);
> - pid_t pgid = process_group_id_;
> - process_group_id_ = 0;
> - lock.unlock();
> + pid_t pgid;
> + {
> + Lock lock(mutex_);
> + pgid = process_group_id_;
> + process_group_id_ = 0;
> + }
> if (pgid > 1) KillProc(-pgid, sig_no, wait_time);
> }
>
> @@ -119,20 +121,23 @@ void Process::Execute(int argc, char *ar
> LOG_WA("setpgid(%u, 0) failed: %s",
> (unsigned) child_pid, strerror(errno));
> }
> - std::unique_lock<std::mutex> lock(mutex_);
> - process_group_id_ = child_pid;
> - StartTimer(timeout);
> - lock.unlock();
> + {
> + Lock lock(mutex_);
> + process_group_id_ = child_pid;
> + StartTimer(timeout);
> + }
> int status;
> pid_t wait_pid;
> do {
> wait_pid = waitpid(child_pid, &status, 0);
> } while (wait_pid == (pid_t) -1 && errno == EINTR);
> - lock.lock();
> - StopTimer();
> - bool killed = process_group_id_ == 0;
> - process_group_id_ = 0;
> - lock.unlock();
> + bool killed;
> + {
> + Lock lock(mutex_);
> + StopTimer();
> + killed = process_group_id_ == 0;
> + process_group_id_ = 0;
> + }
> bool successful = false;
> if (!killed && wait_pid != (pid_t) -1) {
> if (!WIFEXITED(status)) {
> diff --git a/osaf/libs/core/cplusplus/base/process.h
> b/osaf/libs/core/cplusplus/base/process.h
> --- a/osaf/libs/core/cplusplus/base/process.h
> +++ b/osaf/libs/core/cplusplus/base/process.h
> @@ -15,20 +15,19 @@
> *
> */
>
> -#ifndef OPENSAF_OSAF_LIBS_CORE_CPLUSPLUS_BASE_PROCESS_H_
> -#define OPENSAF_OSAF_LIBS_CORE_CPLUSPLUS_BASE_PROCESS_H_
> +#ifndef OSAF_LIBS_CORE_CPLUSPLUS_BASE_PROCESS_H_
> +#define OSAF_LIBS_CORE_CPLUSPLUS_BASE_PROCESS_H_
>
> +#include <chrono>
> #include <csignal>
> #include <cstdint>
> #include <ctime>
> -#include <chrono>
> -#include <mutex>
> -#include "base/macros.h"
> +#include "osaf/libs/core/cplusplus/base/macros.h"
> +#include "osaf/libs/core/cplusplus/base/mutex.h"
>
> namespace base {
>
> class Process {
> - DELETE_COPY_AND_MOVE_OPERATORS(Process);
> public:
> using Duration = std::chrono::steady_clock::duration;
> Process();
> @@ -96,18 +95,20 @@ class Process {
> * processes in the process group have terminated.
> */
> static void KillProc(pid_t pid, int sig_no, const Duration& wait_time);
> +
> private:
> using Clock = std::chrono::steady_clock;
> using TimePoint = std::chrono::steady_clock::time_point;
> void StartTimer(const Duration& timeout);
> void StopTimer();
> static void TimerExpirationEvent(sigval notification_data);
> - std::mutex mutex_;
> + Mutex mutex_;
> timer_t timer_id_;
> bool is_timer_created_;
> pid_t process_group_id_;
> + DELETE_COPY_AND_MOVE_OPERATORS(Process);
> };
>
> -} // namespace base
> +} // namespace base
>
> -#endif /* OPENSAF_OSAF_LIBS_CORE_CPLUSPLUS_BASE_PROCESS_H_ */
> +#endif // OSAF_LIBS_CORE_CPLUSPLUS_BASE_PROCESS_H_
> diff --git a/osaf/libs/core/cplusplus/base/unix_socket.cc
> b/osaf/libs/core/cplusplus/base/unix_socket.cc
> --- a/osaf/libs/core/cplusplus/base/unix_socket.cc
> +++ b/osaf/libs/core/cplusplus/base/unix_socket.cc
> @@ -32,19 +32,10 @@ UnixSocket::UnixSocket(const std::string
> } else {
> addr_.sun_path[0] = '\0';
> }
> - pthread_mutexattr_t attr;
> - int result = pthread_mutexattr_init(&attr);
> - if (result != 0) osaf_abort(result);
> - result = pthread_mutexattr_setprotocol(&attr, PTHREAD_PRIO_INHERIT);
> - if (result != 0) osaf_abort(result);
> - result = pthread_mutex_init(&mutex_, &attr);
> - if (result != 0) osaf_abort(result);
> - result = pthread_mutexattr_destroy(&attr);
> - if (result != 0) osaf_abort(result);
> }
>
> int UnixSocket::Open() {
> - osaf_mutex_lock_ordie(&mutex_);
> + Lock lock(mutex_);
> int sock = fd_;
> if (sock < 0) {
> if (addr_.sun_path[0] != '\0') {
> @@ -60,18 +51,15 @@ int UnixSocket::Open() {
> errno = ENAMETOOLONG;
> }
> }
> - osaf_mutex_unlock_ordie(&mutex_);
> return sock;
> }
>
> UnixSocket::~UnixSocket() {
> Close();
> - int result = pthread_mutex_destroy(&mutex_);
> - if (result != 0) osaf_abort(result);
> }
>
> void UnixSocket::Close() {
> - osaf_mutex_lock_ordie(&mutex_);
> + Lock lock(mutex_);
> int sock = fd_;
> if (sock >= 0) {
> int e = errno;
> @@ -80,7 +68,6 @@ void UnixSocket::Close() {
> CloseHook();
> errno = e;
> }
> - osaf_mutex_unlock_ordie(&mutex_);
> }
>
> bool UnixSocket::OpenHook(int) {
> diff --git a/osaf/libs/core/cplusplus/base/unix_socket.h
> b/osaf/libs/core/cplusplus/base/unix_socket.h
> --- a/osaf/libs/core/cplusplus/base/unix_socket.h
> +++ b/osaf/libs/core/cplusplus/base/unix_socket.h
> @@ -24,6 +24,7 @@
> #include <cerrno>
> #include <string>
> #include "osaf/libs/core/cplusplus/base/macros.h"
> +#include "osaf/libs/core/cplusplus/base/mutex.h"
>
> namespace base {
>
> @@ -85,7 +86,7 @@ class UnixSocket {
> private:
> int fd_;
> struct sockaddr_un addr_;
> - pthread_mutex_t mutex_;
> + Mutex mutex_;
>
> DELETE_COPY_AND_MOVE_OPERATORS(UnixSocket);
> };
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel