chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
journal-remote: fix parsing of fd command line argument
[elogind.git]
/
src
/
journal-remote
/
journal-remote-write.c
diff --git
a/src/journal-remote/journal-remote-write.c
b/src/journal-remote/journal-remote-write.c
index 3b00ff520031218eb97d4a2f0d41bc306b5b8f99..8ede950bea17b60003d6de6a5def1623bacf5628 100644
(file)
--- a/
src/journal-remote/journal-remote-write.c
+++ b/
src/journal-remote/journal-remote-write.c
@@
-19,7
+19,7
@@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include "journal-remote
-write
.h"
+#include "journal-remote.h"
int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) {
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) {
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
@@
-30,8
+30,6
@@
int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) {
}
void iovw_free_contents(struct iovec_wrapper *iovw) {
}
void iovw_free_contents(struct iovec_wrapper *iovw) {
- for (size_t j = 0; j < iovw->count; j++)
- free(iovw->iovec[j].iov_base);
free(iovw->iovec);
iovw->iovec = NULL;
iovw->size_bytes = iovw->count = 0;
free(iovw->iovec);
iovw->iovec = NULL;
iovw->size_bytes = iovw->count = 0;
@@
-40,12
+38,19
@@
void iovw_free_contents(struct iovec_wrapper *iovw) {
size_t iovw_size(struct iovec_wrapper *iovw) {
size_t n = 0, i;
size_t iovw_size(struct iovec_wrapper *iovw) {
size_t n = 0, i;
- for(i = 0; i < iovw->count; i++)
+ for
(i = 0; i < iovw->count; i++)
n += iovw->iovec[i].iov_len;
return n;
}
n += iovw->iovec[i].iov_len;
return n;
}
+void iovw_rebase(struct iovec_wrapper *iovw, char *old, char *new) {
+ size_t i;
+
+ for (i = 0; i < iovw->count; i++)
+ iovw->iovec[i].iov_base = (char*) iovw->iovec[i].iov_base - old + new;
+}
+
/**********************************************************************
**********************************************************************
**********************************************************************/
/**********************************************************************
**********************************************************************
**********************************************************************/
@@
-64,32
+69,67
@@
static int do_rotate(JournalFile **f, bool compress, bool seal) {
return r;
}
return r;
}
-
int writer_init(Writer *s
) {
-
assert(s)
;
+
Writer* writer_new(RemoteServer *server
) {
+
Writer *w
;
- s->journal = NULL;
+ w = new0(Writer, 1);
+ if (!w)
+ return NULL;
- memset(&
s->metrics, 0xFF, sizeof(s
->metrics));
+ memset(&
w->metrics, 0xFF, sizeof(w
->metrics));
- s->mmap = mmap_cache_new();
- if (!s->mmap)
- return log_oom();
+ w->mmap = mmap_cache_new();
+ if (!w->mmap) {
+ free(w);
+ return NULL;
+ }
- s->seqnum = 0;
+ w->n_ref = 1;
+ w->server = server;
- return
0
;
+ return
w
;
}
}
-int writer_close(Writer *s) {
- if (s->journal) {
- journal_file_close(s->journal);
- log_debug("Journal has been closed.");
+Writer* writer_free(Writer *w) {
+ if (!w)
+ return NULL;
+
+ if (w->journal) {
+ log_debug("Closing journal file %s.", w->journal->path);
+ journal_file_close(w->journal);
}
}
- if (s->mmap)
- mmap_cache_unref(s->mmap);
- return 0;
+
+ if (w->server) {
+ w->server->event_count += w->seqnum;
+ if (w->hashmap_key)
+ hashmap_remove(w->server->writers, w->hashmap_key);
+ }
+
+ free(w->hashmap_key);
+
+ if (w->mmap)
+ mmap_cache_unref(w->mmap);
+
+ free(w);
+
+ return NULL;
}
}
+Writer* writer_unref(Writer *w) {
+ if (w && (-- w->n_ref <= 0))
+ writer_free(w);
+
+ return NULL;
+}
+
+Writer* writer_ref(Writer *w) {
+ if (w)
+ assert_se(++ w->n_ref >= 2);
+
+ return w;
+}
+
+
int writer_write(Writer *s,
struct iovec_wrapper *iovw,
dual_timestamp *ts,
int writer_write(Writer *s,
struct iovec_wrapper *iovw,
dual_timestamp *ts,