diff --git a/src/pixiewps.c b/src/pixiewps.c
index ceb0239..eb20a7f 100644
--- a/src/pixiewps.c
+++ b/src/pixiewps.c
@@ -19,6 +19,8 @@
* along with this program. If not, see .
*/
+#define _POSIX_C_SOURCE 200809L
+
#include
#include
#include
@@ -26,6 +28,7 @@
#include
#include
#include
+#include
#include
#include
@@ -121,6 +124,10 @@ static void *crack_thread(void *arg) {
return 0;
}
+static size_t getminstacksize(size_t minimum) {
+ return (minimum < PTHREAD_STACK_MIN) ? PTHREAD_STACK_MIN : minimum;
+}
+
static void init_crack_jobs(struct global *wps) {
job_control.jobs = wps->jobs;
job_control.end = wps->end;
@@ -138,10 +145,15 @@ static void init_crack_jobs(struct global *wps) {
job_control.randr_enonce[i] |= wps->e_nonce[j++];
}
job_control.crack_jobs = malloc(wps->jobs * sizeof (struct job_control));
+ size_t stacksize = getminstacksize(64*1024);
time_t curr = wps->start;
for(i = 0; i < wps->jobs; i++) {
job_control.crack_jobs[i].start = curr;
- pthread_create(&job_control.crack_jobs[i].thr, NULL, crack_thread, &job_control.crack_jobs[i]);
+ pthread_attr_t attr;
+ int attr_ok = pthread_attr_init(&attr) == 0 ;
+ if(attr_ok) pthread_attr_setstacksize(&attr, stacksize);
+ pthread_create(&job_control.crack_jobs[i].thr, &attr, crack_thread, &job_control.crack_jobs[i]);
+ if(attr_ok) pthread_attr_destroy(&attr);
curr -= SECS_PER_JOB_BLOCK;
}
}