forked from enlightenment/efl
todo items for cserve for evas done - well some of them. more to come.
SVN revision: 40495
This commit is contained in:
parent
a5428a4ca3
commit
bd6d938956
|
@ -1,11 +1,9 @@
|
||||||
#include "Evas.h"
|
#include "Evas.h"
|
||||||
#include "evas_cs.h"
|
#include "evas_cs.h"
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
// fixme:'s
|
// fixme:'s
|
||||||
//
|
//
|
||||||
// sigint/term - catch and shut down cleanly (server)
|
|
||||||
// sigpipe - catch and ignore (both)
|
|
||||||
// cwd for loading files needs to be put into a full path (client)
|
|
||||||
// add ops to get/set cache size, check time and cache time (both)
|
// add ops to get/set cache size, check time and cache time (both)
|
||||||
// add ops to get internal state (both)
|
// add ops to get internal state (both)
|
||||||
// preload - make it work (both)
|
// preload - make it work (both)
|
||||||
|
@ -658,6 +656,66 @@ parse_args(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static exit_flag = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
exit_handler(int x, siginfo_t *info, void *data)
|
||||||
|
{
|
||||||
|
exit_flag = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pipe_handler(int x, siginfo_t *info, void *data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_init(void)
|
||||||
|
{
|
||||||
|
struct sigaction action, old_action;
|
||||||
|
|
||||||
|
action.sa_handler = NULL;
|
||||||
|
action.sa_sigaction = exit_handler;
|
||||||
|
action.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigemptyset(&action.sa_mask);
|
||||||
|
sigaction(SIGINT, &action, &old_action);
|
||||||
|
|
||||||
|
action.sa_handler = NULL;
|
||||||
|
action.sa_sigaction = exit_handler;
|
||||||
|
action.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigemptyset(&action.sa_mask);
|
||||||
|
sigaction(SIGTERM, &action, &old_action);
|
||||||
|
|
||||||
|
action.sa_handler = NULL;
|
||||||
|
action.sa_sigaction = exit_handler;
|
||||||
|
action.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigemptyset(&action.sa_mask);
|
||||||
|
sigaction(SIGQUIT, &action, &old_action);
|
||||||
|
|
||||||
|
action.sa_handler = NULL;
|
||||||
|
action.sa_sigaction = pipe_handler;
|
||||||
|
action.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigemptyset(&action.sa_mask);
|
||||||
|
sigaction(SIGPIPE, &action, &old_action);
|
||||||
|
|
||||||
|
// SIGUSR1
|
||||||
|
// SIGUSR2
|
||||||
|
// SIGHUP
|
||||||
|
|
||||||
|
// SIGCHLD
|
||||||
|
|
||||||
|
// SIGSEGV
|
||||||
|
// SIGILL
|
||||||
|
// SIGBUS
|
||||||
|
// SIGFPE
|
||||||
|
// SIGABRT
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
signal_shutdown(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -670,6 +728,7 @@ main(int argc, char **argv)
|
||||||
evas_init();
|
evas_init();
|
||||||
|
|
||||||
img_init();
|
img_init();
|
||||||
|
signal_init();
|
||||||
s = evas_cserve_server_add();
|
s = evas_cserve_server_add();
|
||||||
if (!s)
|
if (!s)
|
||||||
{
|
{
|
||||||
|
@ -706,7 +765,9 @@ main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
/* fixme: timeout 0 only her - future use timeouts for timed
|
/* fixme: timeout 0 only her - future use timeouts for timed
|
||||||
* housekeping */
|
* housekeping */
|
||||||
|
if (exit_flag) break;
|
||||||
evas_cserve_server_wait(s, t_next * 1000000);
|
evas_cserve_server_wait(s, t_next * 1000000);
|
||||||
|
if (exit_flag) break;
|
||||||
t = time(NULL);
|
t = time(NULL);
|
||||||
t_next = t - last_check;
|
t_next = t - last_check;
|
||||||
if ((t_next) > cache_item_timeout_check)
|
if ((t_next) > cache_item_timeout_check)
|
||||||
|
@ -720,6 +781,12 @@ main(int argc, char **argv)
|
||||||
t_next = 1;
|
t_next = 1;
|
||||||
}
|
}
|
||||||
error:
|
error:
|
||||||
|
printf("clean shutdown\n");
|
||||||
|
if (stat_mem)
|
||||||
|
{
|
||||||
|
stat_clean(stat_mem);
|
||||||
|
}
|
||||||
|
signal_shutdown();
|
||||||
img_shutdown();
|
img_shutdown();
|
||||||
if (stat_mem)
|
if (stat_mem)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,7 +1,33 @@
|
||||||
#include "evas_cs.h"
|
#include "evas_cs.h"
|
||||||
|
#include <signal.h>
|
||||||
|
|
||||||
#ifdef EVAS_CSERVE
|
#ifdef EVAS_CSERVE
|
||||||
|
|
||||||
|
static void
|
||||||
|
pipe_handler(int x, siginfo_t *info, void *data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
pipe_handle(int push)
|
||||||
|
{
|
||||||
|
static struct sigaction old_action;
|
||||||
|
struct sigaction action;
|
||||||
|
|
||||||
|
if (push)
|
||||||
|
{
|
||||||
|
action.sa_handler = NULL;
|
||||||
|
action.sa_sigaction = pipe_handler;
|
||||||
|
action.sa_flags = SA_RESTART | SA_SIGINFO;
|
||||||
|
sigemptyset(&action.sa_mask);
|
||||||
|
sigaction(SIGPIPE, &action, &old_action);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sigaction(SIGPIPE, &old_action, &action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static Server *
|
static Server *
|
||||||
server_connect(void)
|
server_connect(void)
|
||||||
{
|
{
|
||||||
|
@ -52,12 +78,22 @@ server_send(Server *s, int opcode, int size, unsigned char *data)
|
||||||
int ints[2];
|
int ints[2];
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
|
pipe_handle(1);
|
||||||
ints[0] = size;
|
ints[0] = size;
|
||||||
ints[1] = opcode;
|
ints[1] = opcode;
|
||||||
num = write(s->fd, ints, (sizeof(int) * 2));
|
num = write(s->fd, ints, (sizeof(int) * 2));
|
||||||
if (num < 0) return 0;
|
if (num < 0)
|
||||||
|
{
|
||||||
|
pipe_handle(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
num = write(s->fd, data, size);
|
num = write(s->fd, data, size);
|
||||||
if (num < 0) return 0;
|
if (num < 0)
|
||||||
|
{
|
||||||
|
pipe_handle(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
pipe_handle(0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,6 +194,7 @@ evas_cserve_image_load(Image_Entry *ie, const char *file, const char *key, RGBA_
|
||||||
Op_Load msg;
|
Op_Load msg;
|
||||||
Op_Load_Reply *rep;
|
Op_Load_Reply *rep;
|
||||||
unsigned char *buf;
|
unsigned char *buf;
|
||||||
|
char fbuf[PATH_MAX], wd[PATH_MAX];
|
||||||
int flen, klen;
|
int flen, klen;
|
||||||
int opcode;
|
int opcode;
|
||||||
int size;
|
int size;
|
||||||
|
@ -171,6 +208,15 @@ evas_cserve_image_load(Image_Entry *ie, const char *file, const char *key, RGBA_
|
||||||
msg.lopt.dpi = lopt->dpi;
|
msg.lopt.dpi = lopt->dpi;
|
||||||
msg.lopt.w = lopt->w;
|
msg.lopt.w = lopt->w;
|
||||||
msg.lopt.h = lopt->h;
|
msg.lopt.h = lopt->h;
|
||||||
|
if (file[0] != '/')
|
||||||
|
{
|
||||||
|
if (getcwd(wd, sizeof(wd)))
|
||||||
|
{
|
||||||
|
snprintf(fbuf, "%s/%s", wd, file);
|
||||||
|
file = fbuf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!realpath(file, wd)) file = wd;
|
||||||
flen = strlen(file) + 1;
|
flen = strlen(file) + 1;
|
||||||
klen = strlen(key) + 1;
|
klen = strlen(key) + 1;
|
||||||
buf = malloc(sizeof(msg) + flen + klen);
|
buf = malloc(sizeof(msg) + flen + klen);
|
||||||
|
|
|
@ -123,6 +123,7 @@ evas_cserve_mem_close(Mem *m)
|
||||||
EAPI Eina_Bool
|
EAPI Eina_Bool
|
||||||
evas_cserve_mem_resize(Mem *m, int size)
|
evas_cserve_mem_resize(Mem *m, int size)
|
||||||
{
|
{
|
||||||
|
if (m->size == size) return 1;
|
||||||
if (m->write)
|
if (m->write)
|
||||||
{
|
{
|
||||||
if (ftruncate(m->fd, size) < 0) return 0;
|
if (ftruncate(m->fd, size) < 0) return 0;
|
||||||
|
|
Loading…
Reference in New Issue