@@ -104,48 +104,53 @@ NamedPipe::NamedPipe(const IpcChannelName_t& name,
104
104
return ;
105
105
}
106
106
107
- cxx::expected<Semaphore, SemaphoreError> sendSemaphore = cxx::error<SemaphoreError>(SemaphoreError::UNDEFINED);
108
- cxx::expected<Semaphore, SemaphoreError> receiveSemaphore = cxx::error<SemaphoreError>(SemaphoreError::UNDEFINED);
109
- if (sharedMemory->hasOwnership ())
107
+ m_sharedMemory.emplace (std::move (*sharedMemory));
108
+
109
+ m_isInitialized = true ;
110
+ auto signalError = [&](const char * name, const char * openMode) {
111
+ std::cerr << " Unable to " << openMode << " the named pipe semaphore \" " << name << " \" for named pipe \" "
112
+ << name << " \" " << std::endl;
113
+ m_isInitialized = false ;
114
+ m_errorValue = IpcChannelError::INTERNAL_LOGIC_ERROR;
115
+ };
116
+
117
+ if (m_sharedMemory->hasOwnership ())
110
118
{
111
- sendSemaphore = Semaphore::create (CreateNamedSemaphore,
112
- convertName (SEND_SEMAPHORE_PREFIX, name).c_str (),
113
- static_cast <mode_t >(S_IRUSR | S_IWUSR),
114
- static_cast <unsigned int >(maxMsgNumber));
115
- receiveSemaphore = Semaphore::create (CreateNamedSemaphore,
116
- convertName (RECEIVE_SEMAPHORE_PREFIX, name).c_str (),
117
- static_cast <mode_t >(S_IRUSR | S_IWUSR),
118
- 0U );
119
+ Semaphore::create (CreateNamedSemaphore,
120
+ convertName (SEND_SEMAPHORE_PREFIX, name).c_str (),
121
+ static_cast <mode_t >(S_IRUSR | S_IWUSR),
122
+ static_cast <unsigned int >(maxMsgNumber))
123
+ .and_then ([&](auto & r) { m_sendSemaphore.emplace (std::move (r)); })
124
+ .or_else ([&](auto ) { signalError (convertName (SEND_SEMAPHORE_PREFIX, name).c_str (), " create" ); });
125
+
126
+ Semaphore::create (CreateNamedSemaphore,
127
+ convertName (RECEIVE_SEMAPHORE_PREFIX, name).c_str (),
128
+ static_cast <mode_t >(S_IRUSR | S_IWUSR),
129
+ 0U )
130
+ .and_then ([&](auto & r) { m_receiveSemaphore.emplace (std::move (r)); })
131
+ .or_else ([&](auto ) { signalError (convertName (RECEIVE_SEMAPHORE_PREFIX, name).c_str (), " create" ); });
119
132
}
120
133
else
121
134
{
122
- sendSemaphore = Semaphore::create (OpenNamedSemaphore, convertName (SEND_SEMAPHORE_PREFIX, name).c_str (), 0 );
123
- receiveSemaphore =
124
- Semaphore::create (OpenNamedSemaphore, convertName (RECEIVE_SEMAPHORE_PREFIX, name).c_str (), 0 );
125
- }
135
+ Semaphore::create (OpenNamedSemaphore, convertName (SEND_SEMAPHORE_PREFIX, name).c_str (), 0 )
136
+ .and_then ([&](auto & r) { m_sendSemaphore.emplace (std::move (r)); })
137
+ .or_else ([&](auto ) { signalError (convertName (SEND_SEMAPHORE_PREFIX, name).c_str (), " open" ); });
126
138
127
- if (sendSemaphore.has_error () || receiveSemaphore.has_error ())
128
- {
129
- std::cerr << " Unable to create or open named pipe semaphores: \" " << convertName (SEND_SEMAPHORE_PREFIX, name)
130
- << " \" and \" " << convertName (RECEIVE_SEMAPHORE_PREFIX, name) << " \" for named pipe \" " << name
131
- << " \" " << std::endl;
132
- m_isInitialized = false ;
133
- m_errorValue = IpcChannelError::INTERNAL_LOGIC_ERROR;
134
- return ;
139
+ Semaphore::create (OpenNamedSemaphore, convertName (RECEIVE_SEMAPHORE_PREFIX, name).c_str (), 0 )
140
+ .and_then ([&](auto & r) { m_receiveSemaphore.emplace (std::move (r)); })
141
+ .or_else ([&](auto ) { signalError (convertName (RECEIVE_SEMAPHORE_PREFIX, name).c_str (), " open" ); });
135
142
}
136
143
137
- m_receiveSemaphore.emplace (std::move (*receiveSemaphore));
138
- m_sendSemaphore.emplace (std::move (*sendSemaphore));
139
-
140
- m_sharedMemory.emplace (std::move (*sharedMemory));
141
- m_messages =
142
- static_cast <MessageQueue_t*>(m_sharedMemory->allocate (sizeof (MessageQueue_t), alignof (MessageQueue_t)));
143
-
144
- if (channelSide == IpcChannelSide::SERVER)
144
+ if (m_isInitialized)
145
145
{
146
- new (m_messages) MessageQueue_t ();
146
+ m_messages =
147
+ static_cast <MessageQueue_t*>(m_sharedMemory->allocate (sizeof (MessageQueue_t), alignof (MessageQueue_t)));
148
+
149
+ if (channelSide == IpcChannelSide::SERVER)
150
+ {
151
+ new (m_messages) MessageQueue_t ();
152
+ }
147
153
}
148
- m_isInitialized = true ;
149
154
}
150
155
151
156
NamedPipe::NamedPipe (NamedPipe&& rhs) noexcept
0 commit comments