Re: [OE-core] [PATCH] pseudo: use epoll API on Linux

2017-09-19 Thread Trevor Woerner
On Tue, Sep 19, 2017 at 7:20 AM, Alexander Kanavin
 wrote:
> and with
> Jussi Kukkonen no longer involved in the project

This is sad news :-(
So long Jussi, and thanks for all the recipes
-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


Re: [OE-core] [PATCH] pseudo: use epoll API on Linux

2017-09-19 Thread Alexander Kanavin

On 09/16/2017 03:06 AM, Trevor Woerner wrote:

So, my understand is that pseudo is looking for a new maintainer.
Maybe that person has been found? ;-)



If that person is me, then thank you for the trust, but:

a) I had no idea how pseudo works until last week; right now I'm 
familiar with maybe 3% of its code;


b) taking responsibility for these things is unfortunately something of 
a zero-sum game; my main area is maintenance of oe-core content, and 
with Jussi Kukkonen no longer involved in the project, I only expect 
more work, not less. Particularly around graphics, multimedia and 
gnome-related things.



Alex
--
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


Re: [OE-core] [PATCH] pseudo: use epoll API on Linux

2017-09-15 Thread Trevor Woerner
So, my understand is that pseudo is looking for a new maintainer.
Maybe that person has been found? ;-)
-- 
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


Re: [OE-core] [PATCH] pseudo: use epoll API on Linux

2017-09-15 Thread Alexander Kanavin

On 09/15/2017 05:20 PM, Alexander Kanavin wrote:


++#include 


Forgot to wrap this one into #ifdef PSEUDO_PORT_LINUX as well.



Alex
--
___
Openembedded-core mailing list
Openembedded-core@lists.openembedded.org
http://lists.openembedded.org/mailman/listinfo/openembedded-core


[OE-core] [PATCH] pseudo: use epoll API on Linux

2017-09-15 Thread Alexander Kanavin
The idea came up here:
https://bugzilla.yoctoproject.org/show_bug.cgi?id=11309
and here:
http://lists.openembedded.org/pipermail/openembedded-core/2017-August/141491.html

Signed-off-by: Alexander Kanavin 
---
 .../pseudo/files/0001-Use-epoll-API-on-Linux.patch | 253 +
 meta/recipes-devtools/pseudo/pseudo_1.8.2.bb   |   1 +
 2 files changed, 254 insertions(+)
 create mode 100644 
meta/recipes-devtools/pseudo/files/0001-Use-epoll-API-on-Linux.patch

diff --git 
a/meta/recipes-devtools/pseudo/files/0001-Use-epoll-API-on-Linux.patch 
b/meta/recipes-devtools/pseudo/files/0001-Use-epoll-API-on-Linux.patch
new file mode 100644
index 000..38b98fae37e
--- /dev/null
+++ b/meta/recipes-devtools/pseudo/files/0001-Use-epoll-API-on-Linux.patch
@@ -0,0 +1,253 @@
+From 191e8a778276ad2e1516a887dc8768fbc3762c77 Mon Sep 17 00:00:00 2001
+From: Alexander Kanavin 
+Date: Fri, 15 Sep 2017 17:00:14 +0300
+Subject: [PATCH] Use epoll API on Linux
+
+Upstream-Status: Pending
+Signed-off-by: Alexander Kanavin 
+---
+ enums/exit_status.in |   3 +
+ pseudo_server.c  | 166 ++-
+ 2 files changed, 167 insertions(+), 2 deletions(-)
+
+diff --git a/enums/exit_status.in b/enums/exit_status.in
+index 6be44d3..88f94cd 100644
+--- a/enums/exit_status.in
 b/enums/exit_status.in
+@@ -18,3 +18,6 @@ listen_fd, "server loop had no valid listen fd"
+ pseudo_loaded, "server couldn't get out of pseudo environment"
+ pseudo_prefix, "couldn't get valid pseudo prefix"
+ pseudo_invocation, "invalid server command arguments"
++epoll_create, "epoll_create() failed"
++epoll_ctl, "epoll_ctl() failed"
++
+diff --git a/pseudo_server.c b/pseudo_server.c
+index ff16efd..f4f11fe 100644
+--- a/pseudo_server.c
 b/pseudo_server.c
+@@ -32,6 +32,7 @@
+ #include 
+ #include 
+ #include 
++#include 
+ #include 
+ 
+ #include "pseudo.h"
+@@ -59,6 +60,7 @@ static int active_clients = 0, highest_client = 0, 
max_clients = 0;
+ 
+ #define LOOP_DELAY 2
+ #define DEFAULT_PSEUDO_SERVER_TIMEOUT 30
++#define EPOLL_MAX_EVENTS 10
+ int pseudo_server_timeout = DEFAULT_PSEUDO_SERVER_TIMEOUT;
+ static int die_peacefully = 0;
+ static int die_forcefully = 0;
+@@ -81,6 +83,7 @@ static int messages = 0, responses = 0;
+ static struct timeval message_time = { .tv_sec = 0 };
+ 
+ static void pseudo_server_loop(void);
++static void pseudo_server_loop_epoll(void);
+ 
+ /* helper function to make a directory, just like mkdir -p.
+  * Can't use system() because the child shell would end up trying
+@@ -369,12 +372,16 @@ pseudo_server_start(int daemonize) {
+   kill(ppid, SIGUSR1);
+   }
+   }
++#ifdef PSEUDO_PORT_LINUX
++  pseudo_server_loop_epoll();
++#else
+   pseudo_server_loop();
++#endif
+   return 0;
+ }
+ 
+ /* mess with internal tables as needed */
+-static void
++static unsigned int
+ open_client(int fd) {
+   pseudo_client_t *new_clients;
+   int i;
+@@ -390,7 +397,7 @@ open_client(int fd) {
+   ++active_clients;
+   if (i > highest_client)
+   highest_client = i;
+-  return;
++  return i;
+   }
+   }
+ 
+@@ -414,9 +421,11 @@ open_client(int fd) {
+ 
+   max_clients += 16;
+   ++active_clients;
++  return max_clients - 16;
+   } else {
+   pseudo_diag("error allocating new client, fd %d\n", fd);
+   close(fd);
++  return 0;
+   }
+ }
+ 
+@@ -566,6 +575,159 @@ serve_client(int i) {
+   }
+ }
+ 
++static void pseudo_server_loop_epoll(void)
++{
++  struct sockaddr_un client;
++  socklen_t len;
++int i;
++int rc;
++int fd;
++  int timeout;
++  struct epoll_event ev, events[EPOLL_MAX_EVENTS];
++  int loop_timeout = pseudo_server_timeout;
++
++  clients = malloc(16 * sizeof(*clients));
++
++  clients[0].fd = listen_fd;
++  clients[0].pid = getpid();
++
++  for (i = 1; i < 16; ++i) {
++  clients[i].fd = -1;
++  clients[i].pid = 0;
++  clients[i].tag = NULL;
++  clients[i].program = NULL;
++  }
++
++  active_clients = 1;
++  max_clients = 16;
++  highest_client = 0;
++
++  pseudo_debug(PDBGF_SERVER, "server loop started.\n");
++  if (listen_fd < 0) {
++  pseudo_diag("got into loop with no valid listen fd.\n");
++  exit(PSEUDO_EXIT_LISTEN_FD);
++  }
++
++  timeout = LOOP_DELAY * 1000;
++
++  int epollfd = epoll_create1(0);
++  if (epollfd == -1) {
++  pseudo_diag("epoll_create1() failed.\n");
++  exit(PSEUDO_EXIT_EPOLL_CREATE);
++  }
++  ev.events = EPOLLIN;
++  ev.data.u64 = 0;
++  if (epoll_ctl(epollfd, EPOLL_CTL_ADD, clients[0].fd, ) == -1) {
++