12 #ifndef ECL_THREADS_THREAD_EXCEPTIONS_POS_HPP_ 13 #define ECL_THREADS_THREAD_EXCEPTIONS_POS_HPP_ 19 #include <ecl/config/ecl.hpp> 20 #if defined(ECL_IS_POSIX) 28 #include <ecl/errors/handlers.hpp> 47 inline Error ECL_LOCAL handlePthreadCreateError(
int error_result) {
48 switch (error_result) {
62 #include <ecl/exceptions/macros.hpp> 63 #if defined(ECL_HAS_EXCEPTIONS) 70 #include <ecl/exceptions/standard_exception.hpp> 89 inline StandardException
ECL_LOCAL throwPthreadCreateException(
const char* loc,
int error_result) {
90 switch (error_result) {
91 case ( EINVAL ) :
return StandardException(loc,
InvalidInputError,
"Invalid settings in 'attr'");
92 case ( EAGAIN ) :
return StandardException(loc,
MemoryError,
"Insufficient resources to create another thread.");
93 case ( EPERM ) :
return StandardException(loc,
PermissionsError,
"No permission to set the scheduling policy and parameters specified in attr.");
94 default :
return StandardException(loc,
UnknownError,
"Unknown error.");
104 inline StandardException
ECL_LOCAL throwPthreadJoinException(
const char* loc,
int error_result) {
105 switch (error_result) {
106 case ( EDEADLK ) :
return StandardException(loc,
UsageError,
"Deadlock! Two threads tried to join each other or a thread tried to join itself.");
107 case ( EINVAL ) :
return StandardException(loc,
InvalidInputError,
"The specified thread is not joinable or another thread is already waiting to join with it.");
108 case ( ESRCH ) :
return StandardException(loc,
InvalidInputError,
"The specified thread (id) could not be found. Probably its already been joined?");
109 default :
return StandardException(loc,
UnknownError,
"Unknown error.");
118 inline StandardException
ECL_LOCAL throwPthreadCancelException(
const char* loc,
int error_result) {
119 switch (error_result) {
120 case ( ESRCH ) :
return StandardException(loc,
InvalidInputError,
"The specified thread (id) could not be found. Probably its already terminated.");
121 default :
return StandardException(loc,
UnknownError,
"Unknown error.");