Line data Source code
1 : /* 2 : * Unix SMB/CIFS implementation. 3 : * Little pthreadpool benchmark 4 : * 5 : * Copyright (C) Volker Lendecke 2014 6 : * 7 : * This program is free software; you can redistribute it and/or modify 8 : * it under the terms of the GNU General Public License as published by 9 : * the Free Software Foundation; either version 3 of the License, or 10 : * (at your option) any later version. 11 : * 12 : * This program is distributed in the hope that it will be useful, 13 : * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : * GNU General Public License for more details. 16 : * 17 : * You should have received a copy of the GNU General Public License 18 : * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 : */ 20 : 21 : #include "includes.h" 22 : #include "../lib/pthreadpool/pthreadpool_pipe.h" 23 : #include "proto.h" 24 : 25 : extern int torture_numops; 26 : 27 0 : static void null_job(void *private_data) 28 : { 29 0 : return; 30 : } 31 : 32 0 : bool run_bench_pthreadpool(int dummy) 33 : { 34 0 : struct pthreadpool_pipe *pool; 35 0 : int i, ret; 36 : 37 0 : ret = pthreadpool_pipe_init(1, &pool); 38 0 : if (ret != 0) { 39 0 : d_fprintf(stderr, "pthreadpool_pipe_init failed: %s\n", 40 : strerror(ret)); 41 0 : return false; 42 : } 43 : 44 0 : for (i=0; i<torture_numops; i++) { 45 0 : int jobid; 46 : 47 0 : ret = pthreadpool_pipe_add_job(pool, 0, null_job, NULL); 48 0 : if (ret != 0) { 49 0 : d_fprintf(stderr, "pthreadpool_pipe_add_job " 50 : "failed: %s\n", strerror(ret)); 51 0 : break; 52 : } 53 0 : ret = pthreadpool_pipe_finished_jobs(pool, &jobid, 1); 54 0 : if (ret < 0) { 55 0 : d_fprintf(stderr, "pthreadpool_pipe_finished_job " 56 : "failed: %s\n", strerror(-ret)); 57 0 : break; 58 : } 59 : } 60 : 61 0 : if (ret != 1) { 62 0 : return false; 63 : } 64 : 65 0 : ret = pthreadpool_pipe_destroy(pool); 66 : 67 0 : return (ret == 0); 68 : }