Hi, this is looking better again: A remote "cibadmin -Q" is now doing the right thing, however a remote "crm_mon" is still _not_ working correctly.
Let's see, now that I should know where to look ... the function cib_recv_plaintext() in lib/common/remote.c looks a bit suspicious to me: - The "if (len == 0)" check will never be true because len is initialised to 512 and then only grows. - The assumption that a partial read (wrt. the buffer) signals no more data is IMO not valid. With the following patch I can at least get a "crm_mon -1rf" to do the right thing: diff -ur Pacemaker-1-0-f7a8250d23fc/lib/common/remote.c Pacemaker-my/lib/common/remote.c --- Pacemaker-1-0-f7a8250d23fc/lib/common/remote.c 2009-11-19 21:12:53.000000000 +0100 +++ Pacemaker-my/lib/common/remote.c 2009-11-20 10:52:36.000000000 +0100 @@ -220,33 +220,29 @@ char* cib_recv_plaintext(int sock) { - int last = 0; char* buf = NULL; - int chunk_size = 512; - int len = chunk_size; + ssize_t buf_size = 512; + ssize_t len = 0; - crm_malloc0(buf, chunk_size); + crm_malloc0(buf, buf_size); while(1) { - int rc = recv(sock, buf+last, chunk_size, 0); + ssize_t rc = recv(sock, buf+len, buf_size-len, 0); if (rc == 0) { if(len == 0) { goto bail; } return buf; - } else if(rc > 0 && rc < chunk_size) { - return buf; - - } else if(rc == chunk_size) { - last = len; - len += chunk_size; - crm_realloc(buf, len); - CRM_ASSERT(buf != NULL); + } else if(rc > 0) { + len += rc; + if (len == buf_size) { + crm_realloc(buf, buf_size += 512); /* Should do exponential growth for amortized constant time? */ + CRM_ASSERT(buf != NULL); + } } - if(rc < 0 && errno != EINTR) { - crm_perror(LOG_ERR,"Error receiving message: %d", rc); + crm_perror(LOG_ERR,"Error receiving message: %d", (int)rc); goto bail; } } And that is as far as I can get with crm_mon, as it doesn't supports continuous update via remote access? static int cib_remote_set_connection_dnotify( cib_t *cib, void (*dnotify)(gpointer user_data)) { return cib_NOTSUPPORTED; } Regards, Colin _______________________________________________ Pacemaker mailing list Pacemaker@oss.clusterlabs.org http://oss.clusterlabs.org/mailman/listinfo/pacemaker