1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms 5 * of the Common Development and Distribution License 6 * (the "License"). You may not use this file except 7 * in compliance with the License. 8 * 9 * You can obtain a copy of the license at 10 * src/OPENSOLARIS.LICENSE 11 * or http://www.opensolaris.org/os/licensing. 12 * See the License for the specific language governing 13 * permissions and limitations under the License. 14 * 15 * When distributing Covered Code, include this CDDL 16 * HEADER in each file and include the License file at 17 * usr/src/OPENSOLARIS.LICENSE. If applicable, 18 * add the following below this CDDL HEADER, with the 19 * fields enclosed by brackets "[]" replaced with your 20 * own identifying information: Portions Copyright [yyyy] 21 * [name of copyright owner] 22 * 23 * CDDL HEADER END 24 */ 25 26/* 27 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 28 * Use is subject to license terms. 29 */ 30 31/* 32 * test file locking 33 */ 34 35#include <unistd.h> 36#include <stdlib.h> 37#include <stdio.h> 38#include <string.h> 39#include <errno.h> 40#include <fcntl.h> 41 42#include "libmicro.h" 43 44static int file; 45 46int 47block(int index) 48{ 49 struct flock fl; 50 51 fl.l_type = F_WRLCK; 52 fl.l_whence = SEEK_SET; 53 fl.l_start = index; 54 fl.l_len = 1; 55 return (fcntl(file, F_SETLKW, &fl) == -1); 56} 57 58int 59unblock(int index) 60{ 61 struct flock fl; 62 63 fl.l_type = F_UNLCK; 64 fl.l_whence = SEEK_SET; 65 fl.l_start = index; 66 fl.l_len = 1; 67 return (fcntl(file, F_SETLK, &fl) == -1); 68} 69int 70benchmark_init() 71{ 72 char fname[80]; 73 int errors = 0; 74 75 (void) sprintf(fname, "/private/tmp/oneflock.%ld", getpid()); 76 77 file = open(fname, O_CREAT | O_TRUNC | O_RDWR, 0600); 78 79 if (file == -1) { 80 errors++; 81 } 82 if (unlink(fname)) { 83 errors++; 84 } 85 86 lm_tsdsize = 0; 87 88 return (errors); 89} 90 91/*ARGSUSED*/ 92int 93benchmark(void *tsd, result_t *res) 94{ 95 int i; 96 int e = 0; 97 98 for (i = 0; i < lm_optB; i ++) { 99 e += block(0); 100 e += unblock(0); 101 } 102 res->re_count = i; 103 res->re_errors = e; 104 105 return (0); 106} 107