torture/msgtest.c

ソースコードを見る。

関数

static void pong_message (int msg_type, struct process_id src, void *buf, size_t len, void *private_data)
int main (int argc, char *argv[])

変数

static int pong_count


関数

static void pong_message ( int  msg_type,
struct process_id  src,
void *  buf,
size_t  len,
void *  private_data 
) [static]

msgtest.c32 行で定義されています。

参照先 pong_count.

参照元 main().

00034 {
00035         pong_count++;
00036 }

int main ( int  argc,
char *  argv[] 
)

msgtest.c38 行で定義されています。

参照先 bufdyn_CONFIGFILEfprintf()load_case_tables()message_dispatch()message_init()message_register()message_send_pid()cli_state::pidpid_to_procid()pong_countpong_message()printf()setup_logging()smb_msleep()timeval_current()timeval_elapsed().

00039 {
00040         pid_t pid;
00041         int i, n;
00042         char buf[12];
00043 
00044         load_case_tables();
00045 
00046         setup_logging(argv[0],True);
00047         
00048         lp_load(dyn_CONFIGFILE,False,False,False,True);
00049 
00050         message_init();
00051 
00052         if (argc != 3) {
00053                 fprintf(stderr, "%s: Usage - %s pid count\n", argv[0],
00054                         argv[0]);
00055                 exit(1);
00056         }
00057 
00058         pid = atoi(argv[1]);
00059         n = atoi(argv[2]);
00060 
00061         message_register(MSG_PONG, pong_message, NULL);
00062 
00063         for (i=0;i<n;i++) {
00064                 message_send_pid(pid_to_procid(pid), MSG_PING, NULL, 0, True);
00065         }
00066 
00067         while (pong_count < i) {
00068                 message_dispatch();
00069                 smb_msleep(1);
00070         }
00071 
00072         /* Now test that the duplicate filtering code works. */
00073         pong_count = 0;
00074 
00075         safe_strcpy(buf, "1234567890", sizeof(buf)-1);
00076 
00077         for (i=0;i<n;i++) {
00078                 message_send_pid(pid_to_procid(getpid()), MSG_PING,
00079                                  NULL, 0, False);
00080                 message_send_pid(pid_to_procid(getpid()), MSG_PING,
00081                                  buf, 11, False);
00082         }
00083 
00084         for (i=0;i<n;i++) {
00085                 message_dispatch();
00086                 smb_msleep(1);
00087         }
00088 
00089         if (pong_count != 2) {
00090                 fprintf(stderr, "Duplicate filter failed (%d).\n", pong_count);
00091         }
00092 
00093         /* Speed testing */
00094 
00095         pong_count = 0;
00096 
00097         {
00098                 struct timeval tv = timeval_current();
00099                 size_t timelimit = n;
00100                 size_t ping_count = 0;
00101 
00102                 printf("Sending pings for %d seconds\n", (int)timelimit);
00103                 while (timeval_elapsed(&tv) < timelimit) {              
00104                         if(NT_STATUS_IS_OK(message_send_pid(pid_to_procid(pid),
00105                                                             MSG_PING,
00106                                                             buf, 11, False)))
00107                            ping_count++;
00108                         if(NT_STATUS_IS_OK(message_send_pid(pid_to_procid(pid),
00109                                                             MSG_PING,
00110                                                             NULL, 0, False)))
00111                            ping_count++;
00112 
00113                         while (ping_count > pong_count + 20) {
00114                                 message_dispatch();
00115                         }
00116                 }
00117                 
00118                 printf("waiting for %d remaining replies (done %d)\n", 
00119                        (int)(ping_count - pong_count), pong_count);
00120                 while (timeval_elapsed(&tv) < 30 && pong_count < ping_count) {
00121                         message_dispatch();
00122                 }
00123                 
00124                 if (ping_count != pong_count) {
00125                         fprintf(stderr, "ping test failed! received %d, sent "
00126                                 "%d\n", pong_count, (int)ping_count);
00127                 }
00128                 
00129                 printf("ping rate of %.0f messages/sec\n", 
00130                        (ping_count+pong_count)/timeval_elapsed(&tv));
00131         }
00132 
00133         return (0);
00134 }


変数

int pong_count [static]

msgtest.c26 行で定義されています。

参照元 main()pong_message().


Sambaに対してSat Aug 29 21:24:31 2009に生成されました。  doxygen 1.4.7