diff options
Diffstat (limited to 'contrib/sendmail/libsm/t-shm.c')
| -rw-r--r-- | contrib/sendmail/libsm/t-shm.c | 276 | 
1 files changed, 0 insertions, 276 deletions
diff --git a/contrib/sendmail/libsm/t-shm.c b/contrib/sendmail/libsm/t-shm.c deleted file mode 100644 index ba0bc6c3ab91..000000000000 --- a/contrib/sendmail/libsm/t-shm.c +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Copyright (c) 2000-2002, 2004, 2005 Sendmail, Inc. and its suppliers. - *      All rights reserved. - * - * By using this file, you agree to the terms and conditions set - * forth in the LICENSE file which can be found at the top level of - * the sendmail distribution. - */ - -#include <sm/gen.h> -SM_RCSID("@(#)$Id: t-shm.c,v 1.22 2005/01/14 02:14:10 ca Exp $") - -#include <stdio.h> - -#if SM_CONF_SHM -# include <stdlib.h> -# include <unistd.h> -# include <sys/wait.h> - -# include <sm/heap.h> -# include <sm/string.h> -# include <sm/test.h> -# include <sm/shm.h> - -# define SHMSIZE	1024 -# define SHM_MAX	6400000 -# define T_SHMKEY	21 - - -/* -**  SHMINTER -- interactive testing of shared memory -** -**	Parameters: -**		owner -- create segment. -** -**	Returns: -**		0 on success -**		< 0 on failure. -*/ - -int shminter __P((bool)); - -int -shminter(owner) -	bool owner; -{ -	int *shm, shmid; -	int i, t; - -	shm = (int *) sm_shmstart(T_SHMKEY, SHMSIZE, 0, &shmid, owner); -	if (shm == (int *) 0) -	{ -		perror("shminit failed"); -		return -1; -	} - -	while ((t = getchar()) != EOF) -	{ -		switch (t) -		{ -		  case 'c': -			*shm = 0; -			break; -		  case 'i': -			++*shm; -			break; -		  case 'd': -			--*shm; -			break; -		  case 's': -			sleep(1); -			break; -		  case 'l': -			t = *shm; -			for (i = 0; i < SHM_MAX; i++) -			{ -				++*shm; -			} -			if (*shm != SHM_MAX + t) -				fprintf(stderr, "error: %d != %d\n", -					*shm, SHM_MAX + t); -			break; -		  case 'v': -			printf("shmval: %d\n", *shm); -			break; -		  case 'S': -			i = sm_shmsetowner(shmid, getuid(), getgid(), 0644); -			printf("sm_shmsetowner=%d\n", i); -			break; -		} -	} -	return sm_shmstop((void *) shm, shmid, owner); -} - - -/* -**  SHMBIG -- testing of shared memory -** -**	Parameters: -**		owner -- create segment. -**		size -- size of segment. -** -**	Returns: -**		0 on success -**		< 0 on failure. -*/ - -int shmbig __P((bool, int)); - -int -shmbig(owner, size) -	bool owner; -	int size; -{ -	int *shm, shmid; -	int i; - -	shm = (int *) sm_shmstart(T_SHMKEY, size, 0, &shmid, owner); -	if (shm == (int *) 0) -	{ -		perror("shminit failed"); -		return -1; -	} - -	for (i = 0; i < size / sizeof(int); i++) -		shm[i] = i; -	for (i = 0; i < size / sizeof(int); i++) -	{ -		if (shm[i] != i) -		{ -			fprintf(stderr, "failed at %d: %d", i, shm[i]); -		} -	} - -	return sm_shmstop((void *) shm, shmid, owner); -} - - -/* -**  SHMTEST -- test of shared memory -** -**	Parameters: -**		owner -- create segment. -** -**	Returns: -**		0 on success -**		< 0 on failure. -*/ - -# define MAX_CNT	10 - -int shmtest __P((int)); - -int -shmtest(owner) -	int owner; -{ -	int *shm, shmid; -	int cnt = 0; - -	shm = (int *) sm_shmstart(T_SHMKEY, SHMSIZE, 0, &shmid, owner); -	if (shm == (int *) 0) -	{ -		perror("shminit failed"); -		return -1; -	} - -	if (owner) -	{ -		int r; - -		r = sm_shmsetowner(shmid, getuid(), getgid(), 0660); -		SM_TEST(r == 0); -		*shm = 1; -		while (*shm == 1 && cnt++ < MAX_CNT) -			sleep(1); -		SM_TEST(cnt <= MAX_CNT); - -		/* release and re-acquire the segment */ -		r = sm_shmstop((void *) shm, shmid, owner); -		SM_TEST(r == 0); -		shm = (int *) sm_shmstart(T_SHMKEY, SHMSIZE, 0, &shmid, owner); -		SM_TEST(shm != (int *) 0); -	} -	else -	{ -		while (*shm != 1 && cnt++ < MAX_CNT) -			sleep(1); -		SM_TEST(cnt <= MAX_CNT); -		*shm = 2; - -		/* wait a momemt so the segment is still in use */ -		sleep(2); -	} -	return sm_shmstop((void *) shm, shmid, owner); -} - -int -main(argc, argv) -	int argc; -	char *argv[]; -{ -	bool interactive = false; -	bool owner = false; -	int big = -1; -	int ch; -	int r = 0; -	int status; -	extern char *optarg; - -# define OPTIONS	"b:io" -	while ((ch = getopt(argc, argv, OPTIONS)) != -1) -	{ -		switch ((char) ch) -		{ -		  case 'b': -			big = atoi(optarg); -			break; - -		  case 'i': -			interactive = true; -			break; - -		  case 'o': -			owner = true; -			break; - -		  default: -			break; -		} -	} - -	if (interactive) -		r = shminter(owner); -	else if (big > 0) -		r = shmbig(true, big); -	else -	{ -		pid_t pid; -		extern int SmTestNumErrors; - -		if ((pid = fork()) < 0) -		{ -			perror("fork failed\n"); -			return -1; -		} - -		sm_test_begin(argc, argv, "test shared memory"); -		if (pid == 0) -		{ -			/* give the parent the chance to setup data */ -			sleep(1); -			r = shmtest(false); -		} -		else -		{ -			r = shmtest(true); -			(void) wait(&status); -		} -		SM_TEST(r == 0); -		if (SmTestNumErrors > 0) -			printf("add -DSM_CONF_SHM=0 to confENVDEF in devtools/Site/site.config.m4\nand start over.\n"); -		return sm_test_end(); -	} -	return r; -} -#else /* SM_CONF_SHM */ -int -main(argc, argv) -	int argc; -	char *argv[]; -{ -	printf("No support for shared memory configured on this machine\n"); -	return 0; -} -#endif /* SM_CONF_SHM */  | 
