82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
case ERROR_NOT_ENOUGH_MEMORY:
error = ENOMEM;
break;
case ERROR_ACCESS_DENIED:
error = EACCES;
break;
default:
OF_ENSURE(0);
}
free(context);
return error;
}
if (attr != NULL && attr->priority != 0)
OF_ENSURE(!SetThreadPriority(*thread, priority));
return 0;
}
int
OFPlainThreadJoin(OFPlainThread thread)
{
switch (WaitForSingleObject(thread, INFINITE)) {
case WAIT_OBJECT_0:
CloseHandle(thread);
return 0;
case WAIT_FAILED:
switch (GetLastError()) {
case ERROR_INVALID_HANDLE:
return EINVAL;
default:
OF_ENSURE(0);
}
default:
OF_ENSURE(0);
}
}
int
OFPlainThreadDetach(OFPlainThread thread)
{
CloseHandle(thread);
|
|
|
|
|
|
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
case ERROR_NOT_ENOUGH_MEMORY:
error = ENOMEM;
break;
case ERROR_ACCESS_DENIED:
error = EACCES;
break;
default:
OFEnsure(0);
}
free(context);
return error;
}
if (attr != NULL && attr->priority != 0)
OFEnsure(!SetThreadPriority(*thread, priority));
return 0;
}
int
OFPlainThreadJoin(OFPlainThread thread)
{
switch (WaitForSingleObject(thread, INFINITE)) {
case WAIT_OBJECT_0:
CloseHandle(thread);
return 0;
case WAIT_FAILED:
switch (GetLastError()) {
case ERROR_INVALID_HANDLE:
return EINVAL;
default:
OFEnsure(0);
}
default:
OFEnsure(0);
}
}
int
OFPlainThreadDetach(OFPlainThread thread)
{
CloseHandle(thread);
|