From 280b828b7b56be9bab157f70be17263b4ddd018c Mon Sep 17 00:00:00 2001
From: Martin Lange <martin.lange@ufz.de>
Date: Mon, 28 Nov 2022 23:50:55 +0100
Subject: [PATCH] outputs check for shared memory of subsequent pushes

---
 src/finam/sdk/output.py | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/finam/sdk/output.py b/src/finam/sdk/output.py
index 8bb67507..ef5b3182 100644
--- a/src/finam/sdk/output.py
+++ b/src/finam/sdk/output.py
@@ -4,9 +4,12 @@ Implementations of IOutput
 import logging
 from datetime import datetime
 
+import numpy as np
+
 from ..data import tools
 from ..data.tools import Info
 from ..errors import (
+    FinamDataError,
     FinamMetaDataError,
     FinamNoDataError,
     FinamStaticDataError,
@@ -144,7 +147,17 @@ class Output(IOutput, Loggable):
             time = None
 
         with ErrorLogger(self.logger):
-            self.data.append((time, tools.to_xarray(data, self.name, self.info, time)))
+            xdata = tools.to_xarray(data, self.name, self.info, time)
+            if len(self.data) > 0:
+                d = self.data[-1][1]
+                if np.may_share_memory(
+                    tools.get_magnitude(d), tools.get_magnitude(xdata)
+                ):
+                    raise FinamDataError(
+                        "Received data that shares memory with previously received data."
+                    )
+
+            self.data.append((time, xdata))
 
         self._time = time
 
-- 
GitLab