#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "../inc/config.h"
#include <aitsched.h>
intptr_t Kill;
void *event(sched_task_t *arg)
{
printf("Event::\n");
taskExit(arg, NULL);
}
void *regular(sched_task_t *arg)
{
printf("Task::\n");
taskExit(arg, NULL);
}
void *timer(sched_task_t *arg)
{
printf("Timer %p sec::\n", TASK_ARG(arg));
taskExit(arg, NULL);
}
void *r(sched_task_t *arg)
{
printf("read:: %ld bytes wait\n", (long) TASK_RET(arg));
Kill++;
taskExit(arg, NULL);
}
void *w(sched_task_t *arg)
{
printf("write:: test\n");
write(TASK_FD(arg), "piuk\n", 6);
taskExit(arg, NULL);
}
void *once(sched_task_t *arg)
{
printf("once::\n");
taskExit(arg, NULL);
}
void *thr(sched_task_t *arg)
{
printf("tid (%lx):: %s\n", TASK_VAL(arg), __func__);
taskExit(arg, 42);
}
void *thr4kill(sched_task_t *arg)
{
char blah[BUFSIZ];
printf("tid (%lx):: %s\n", TASK_VAL(arg), __func__);
read(0, blah, sizeof blah);
printf("never see!!! (%lx):: %s (%d == %d)\n", TASK_VAL(arg), (char*) TASK_ARG(arg), TASK_TYPE(arg), taskTHREAD);
taskExit(arg, 0);
}
void sig(int s)
{
switch (s) {
case SIGTERM:
Kill++;
break;
}
}
int
main(int argc, char **argv)
{
sched_root_task_t *root;
int f, fd;
struct sockaddr_in sin;
struct timespec ts = { 20, 0 };
// struct timespec p = { 0, 10000000 };
struct sigaction sa;
sched_task_t *t;
sa.sa_handler = sig;
sigemptyset(&sa.sa_mask);
sigaction(SIGTERM, &sa, NULL);
f = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (f == -1)
return 1;
sin.sin_len = sizeof sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(2345);
sin.sin_addr.s_addr = INADDR_ANY;
if (bind(f, (struct sockaddr*) &sin, sizeof sin) == -1)
return 1;
fd = open("test_aio.dat", O_CREAT | O_RDWR, 0644);
if (fd == -1)
return 1;
printf("fd=%d\n", fd);
root = schedBegin();
if (!root) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 1;
}
if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 4;
} else
ts.tv_sec = 15;
if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 4;
} else
ts.tv_sec = 10;
if (!schedEvent(root, event, "piuk", 1234, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 2;
}
if (!schedTask(root, regular, "piuk", 1111, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 3;
}
if (!schedTimer(root, timer, (void*) (intptr_t) ts.tv_sec, ts, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 4;
}
if (!schedRead(root, r, "rrr", f, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 5;
}
if (!schedWrite(root, w, "www", f, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 6;
}
if (!(t = schedThread(root, thr4kill, "0aaaa", 0, NULL, 0))) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
if (!schedThread(root, thr, "mdaaaa this is thread task", 8192, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
if (!schedThread(root, thr, "mdaaaa this is thread task -detached", 131072, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
if (!schedThread(root, thr, "mdaaaa this is thread task -j", 0, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
printf("try to cancel tid = %lx\n", TASK_VAL(t));
schedCancel(t);
if (!schedThread(root, thr, "mdaaaa this is thread task -j2", 0, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
if (!(t = schedThread(root, thr4kill, "0aaaa", 0, NULL, 0))) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
if (!schedThread(root, thr, "mdaaaa this is thread task -j3", 4096, NULL, 0)) {
printf("Error:: #%d - %s\n", sched_GetErrno(), sched_GetError());
return 7;
}
sleep(1);
schedCancel(t);
schedCallOnce(root, once, "000000", 42, NULL, 0);
// schedPolling(root, &p, NULL);
schedRun(root, &Kill);
schedEnd(&root);
close(fd);
close(f);
return 0;
}
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>