Merge pull request #45 from vrahane/log_watermark_response_fix
log_mgmt:watermark should be set at last log entry
diff --git a/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h b/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h
index 0a62652..81b65d3 100644
--- a/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h
+++ b/cmd/log_mgmt/include/log_mgmt/log_mgmt_impl.h
@@ -122,7 +122,7 @@
* @return 0 on success, non-zero on failure
*/
int
-log_mgmt_impl_set_watermark(struct log_mgmt_log *log, int index);
+log_mgmt_impl_set_watermark(const struct log_mgmt_log *log, int index);
#ifdef __cplusplus
}
diff --git a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
index 77ce6cd..edff9a0 100644
--- a/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
+++ b/cmd/log_mgmt/port/mynewt/src/mynewt_log_mgmt.c
@@ -75,7 +75,7 @@
}
int
-log_mgmt_impl_set_watermark(struct log_mgmt_log *log, int index)
+log_mgmt_impl_set_watermark(const struct log_mgmt_log *log, int index)
{
#if MYNEWT_VAL(LOG_STORAGE_WATERMARK)
struct log *tmplog;
diff --git a/cmd/log_mgmt/src/log_mgmt.c b/cmd/log_mgmt/src/log_mgmt.c
index 0cd94a9..0686c37 100644
--- a/cmd/log_mgmt/src/log_mgmt.c
+++ b/cmd/log_mgmt/src/log_mgmt.c
@@ -40,6 +40,8 @@
/** Context used during walks. */
struct log_walk_ctxt {
+ /* last encoded index */
+ uint32_t last_enc_index;
/* The number of bytes encoded to the response so far. */
size_t rsp_len;
/* The encoder to use to write the current log entry. */
@@ -248,6 +250,7 @@
}
ctxt->counter++;
+ ctxt->last_enc_index = entry->index;
return 0;
}
@@ -310,6 +313,11 @@
return LOG_MGMT_ERR_ENOMEM;
}
+#if LOG_MGMT_READ_WATERMARK_UPDATE
+ if (!rc) {
+ log_mgmt_impl_set_watermark(log, ctxt.last_enc_index);
+ }
+#endif
err:
return rc;
}
@@ -429,19 +437,10 @@
if (log.type != LOG_MGMT_TYPE_STREAM) {
if (name_len == 0 || strcmp(name, log.name) == 0) {
rc = log_encode(&log, &logs, timestamp, index);
-
-#if LOG_MGMT_READ_WATERMARK_UPDATE
- if (rc == 0 || rc == LOG_MGMT_ERR_EUNKNOWN) {
- log_mgmt_impl_set_watermark(&log, index);
- }
-#endif
if (rc) {
goto err;
}
-#if LOG_MGMT_READ_WATERMARK_UPDATE
- log_mgmt_impl_set_watermark(&log, index);
-#endif
/* If the client specified this log, he isn't interested in the
* remaining ones.
*/
diff --git a/cmd/log_mgmt/src/stubs.c b/cmd/log_mgmt/src/stubs.c
index 05706e5..db1b5b7 100644
--- a/cmd/log_mgmt/src/stubs.c
+++ b/cmd/log_mgmt/src/stubs.c
@@ -65,7 +65,7 @@
}
int __attribute__((weak))
-log_mgmt_impl_set_watermark(struct log_mgmt_log *log, int index)
+log_mgmt_impl_set_watermark(const struct log_mgmt_log *log, int index)
{
return MGMT_ERR_ENOTSUP;
}