HISE crashes when manipulating table data objects
-
I encountered a crash when manipulating table data objects. I'm using
Table.getTablePointsAsArray
andTable.setTablePointsFromArray
functions to mirror (and manipulate data, not used in this example as the crash happens without it) data from one table to another.I'm doing this from the
Table.setContentCallback
since I want this to happen when I "add, remove or change" a point in the table.The crash does not happen instantly, but pretty reliably when using the right-click mouse button to change the curve value of the adjacent table point. (I'm pretty sure I have experienced a crash with a left-click and move on a point in the table, but very sure about the right-click.)
The crash happens more often/faster in a compiled plugin running in a DAW.
These crashes are happening on the develop branch and have not been tested on master.
To recreate the crash one should only have to play around with the table for a few minutes, and be liberal with moving the mouse all over the place while holding in the right-click button on the table to change the curve value.
A side note, when using the script node example, when running the table using a clock ramp, the
setContentCallback
is called repeatedly without changing any points in the table.ScriptNode example
HiseSnippet 1583.3ocuX01SabDDdOCaRsaPpos46mxGhLpTGbdgRTTSwXfDqV.qXGZT+BZ4t01q37tW2aMfSUj5Os9Sp+CRmY2y9tCrID2zZjPd24smc1YlmEZqUA7jDkl3Ut63XNw6NzNiklAMGvDRRqcHd2iZXmDwONPyRFbL+B1v3HNY6wwrjDdHwyaoWhp5UdYh8ye+SayhXx.d1VDxQJQ.+WDCElrcau0OKhh1iEx6JFlS6mrUq.kroJRMBf0Rz0IwrfSY84GvP0JQId2Z2PgQo6XXFdBwa4sUgi6LPctzo+QhDA.YbQcRGvQts2SEEhHF2kzbfHJr8jieBA7R6rjwRtjw2R2WDJlteVR4qrB7yrHe9vqTQ3sTA3UOO7VOG7lAj7xAIpCR2k1IPKhMYRP77Mo6lgn5EfzAiF1EuEAzP89RHI6TmT5CknMURCWZpMjcJeOMrnErV2iEvqtw5qulO7qUetekJvkRhw+Ll12Y7dust+O5aqVp0mar9eZ3qd+T.AZc+UedNi6OPkXN1VSAlOI3fCZpFFqjvhp2OmNEM1UJFxLLv1ck8ERds.MGxyMjgul2Wj.P2hjc.cpVGPdkJngIVzHUg7ogd5oXJ5qhpmK10z7df6TVekEZzmUd3C8+0AbYNG6KR7CFvPP022LfC.NZD2W0ytvE0yDL+fHUvo9ZnOBcBJKvkD7CXQQm.059mCMF9m3DHjiTiRhFaWCJvCqUwuxkOO0RvDn0MMS8R0dijAFgRVcU++nRYLKvzZ3feEamd6oDRSRijFZMabU3XVVzqJZyCd.ZZsHtruYf+K7quZkxkyRHXvy4.nHZnyEfQfWd+pOeBT7UxCTF9g.lp.Xpx6q3eYQ85MSY3gSqfiudlhwQH5qyvpxQCOgqWycqLUQnsuXyJc9Mq4mkjdkkSQkrkTXNLlKm2DFR5EDzXWJEUP3M115URafsoQh.ZZ+Z5kumHVnmerJl7IdOk93MpU7yYGd34Gb9yZ2+2e4lMabzSd2gvl89NTzyDA.pOzglqGBqPy0L7YN5uoE1Ugy3RyJPlJlqMB7RvaG9Y.ggahWY5N7jSMpXaZKcFAw61eBItKxf8K1ZbdplyEglAS2Xq+bqAbQ+A4XoDaEO4JrUnkdb5bMLE9wgSwj3bPxVweTj7W82x5hVxP9E3X7JVRzLBhkcoKfZRENJhYJxWgjzoBf9hBjC37dYhvLNOI9mMRraJDuKssvDLX1XrzLvH1F8e.FSo9Wgtaud7.SF.Wlt2a++imuBcB+jM3Ep6lKytWNl8eyi5mi3TyjIwJs4ULYHLD8xzmcujbb5+ULBmyuqDi1K0hvpF8H9Z9aNOMgWFD.2l7pWQXaKu5tW.b0RVzrs2vztGh.ZzDYLsjyYC1i07Xll2U0NBHZRruJ80vAYM+SPs6HdG+prAosxaa8GxUK4QIKBowstw270u9BuWqFAL782mYzBrqFtN6.u6Mf2LEc30ZIj6vsdcbMV62gKCsK9.7IUX8o0.fv5SDlQ6PNfaNWoO0Vxk9c3rf0Wqj+U9ji35DrCz61z0qA+PZDEoNGm1IR6MgJO6dsUQiiGnjh.bKmFSvdigpQ3nQ2A3UrjtLQD1LCAGpK.A6wBfr331Lbx2coHoJzsAW+AS65JBrrJeLehdYxemfKq..XncbL9WIrDJGOqkRCmqQx99qiw2eQtR70P+Pl3OonsLd3i3WLgVaGQRLTZt8HXLhqIuvNv5zI4KS+dfJoMCBI23TkNcE788ExibTuT71frO6hz02hVeSXiNFdLVuiJTGViGyaS6xAtIRAKIyys0ura2XNt8Nz8GEYDwQBvGELmbyfrS4Y45UnMBC6p5H5Cc72PbeS88cnuIFdsBGGGsfv9Qyw0UnsjPUj3L9kwb16YHjLVstLM7babubEkqPCrE4t2HTnp7d1tBXVTs7p7upxLkuXx2xpDsynJTH5kK8rzGKy6p6ba8wO94iSAssrg3Jfquj61qUxQnzfrBCXjxh7Bx+Wl2NjEnUGmdsgGnuvtCjAk1+CFko6iq8qO4I0tz4PQn33ffICDlsMOZAr4wKfMOYAr4oKfMar.17CKfMads1f+ybZLxnF5H2fMZuqs3xyy8dG6SsH+CrpkhQO
Example with no script node, just table data.
HiseSnippet 1759.3ocuX8+aaTCE2Wa8FMrhX7keAjPmlPSYrQZxFqLDBnsosPDzsrkrxWjPUt24jX5E6S9bZa.M9af+r3OG9O.dO66xcWZRoMLVpTUr86Ke7687yebZqUA7jDkl3sZ2wwbh2MncFKMCZNfIjjV6P7depTIOLIPKhMG16rCMrih3GFnYICHaONlkjvCIddK+0nBdqtBw94u9psYQLY.OeJB4.kHf+chgBS9rs27aEQQ6wB4cECKH8mrYq.kroJRMB.2xz5jXVvwr97GyPwVhR7t1tgBiR2wvL7Dh2JaqBG2Yf5ToS9CDIB.p3fFjNfgbSumJJDQLNKo4.QTX6rfPBArR67PxxtPx6P2WDJlLedn4MsK3mqQw3g2Rkg2xkfWihvqdA3MCH4U.RTGjtIsiMgjuBhm2Nc1bD0nDjd7ngcwrGfFp2qCAYm3jk94UnMURCWZpMjcLeOMLnELV2iEvqtQ852y+Q0qemO2uRk0WGRKIF+SXZem568CM7+BeaUSs9bi0CS.P0akBIPpacmOuRkbs6OPkXbkSf9Y9GrPS0vXkDFT8VEjA0NWYWU3oByfCCYF1bMvTxU1HwLMHTlA1U1WH40BzbHgskL7Y79hDHFX2P6.xT8gy.BWZkaTG29quNpp6zjTExmr+mDKmDCqhJTH.TSy6AFTYsVtyAglZSVRvB6Qz+EFVKAiT1fVSVTzQvwqp8FICLBkr5c7+sJqhPko0.5Jp1jbrRHMIakrkVyFWEL9phdUQwu8sQspEwk8MC7+R+F2oxpqlCXzuEL.TrMzYBPIvJuvEl7+9AbYg.kuHwOX.CCy88MC3PJHZD2W0yNvEEOQv7ChTAG6qYCiQifqE31i9AoaR+SgFN9G4VPHGoFkDM1NFDfGVqx5ejekoyPWkf04z8UQD6iVOCN9J4iUF9S.bUAvUkWTwe5k50alqgaPsBBB5YtL1fVeQJVUNZ3Qb88b4lIBBMUK2JjN+VgE6Tml3JHnR1RJLOIlKmW+aRZRBZatbJp.2arMMWKs8nMTRDPKw2hNcthXgdwKsvD.w6gzGrQsxeN4IO3gO842U9iQ+3FMsig+06t3RelarCMWLDViV3H9Ux6a7z9i+reY6uezmt3d+lzo5c7RFAOuE1DBuCKMu.4pXt1Hvx.uc3m.DBb2nsJcGdxwFULbu9j92DuqeERcmkC6vMGWjJwohPy.7Ru+viPFvE8GXvQ+IrXbVwSqvYeAJ4xflxYw4.jMiy.R1pi2LCLYyH1zZhVxP9YHDqPHWNDb9L47BG+9UGEzKFEeG6HdjEEuQwYZTDBe3bxHmQJlQdGXjgeF782i9b4Hf2RZ2Te6c.tv6UGI2uHR1YloDpWXIj7ASPBX6H1IKtyev7bddlX9N+Mn6yPdDYdu.UvUbGb.RnpvQQLSYloHc7zEfdzknAhL6jIBy3hz0eoQW8xBwaRaKLAClMFWZFXD5h7+AFSI4uFc2d83Alb.tBcue3UGi9JzLFfVmeCZNu44yg2q.G9exi5WfbplIShUZy2vjgvE5SSQs6TqirQNmRHuickn29ZsHrpQOhCODXdRBu.H.xl7pmaw1VBo6dFTGKYQyVeCS6dxAHQSjCmk9aNIiXMGIg1U0NBH9j.76h3OC1H2y+HT5NhekedlIoM221ZOj8njGkrHDXt1kNy23hK7dlZDv4r+9LiVfsVgzYG3EtA7lonCSqKgcaciqiiwZ+NbYncveCeRWrwjZ.XwFYKlSAh7Xt4Tk9XaIW52g8BVesFs363OfqSvSfdWmVuF7GYqnH0oXmNQ5YSnxyNWaUz33AJoH.mxIQF12ZnZjzjsA9FVRWlHBOLCNGpKfE1iE.QwwsYXSuaRQBdvoMH8GL4TWYfkW4iwSzJY+h.tnB.fg1Vw3uGvx353dcoT24NHYeQvg3KBHmy+Z37P9xWIusBt4i3mkQvYGQRLTZt8HnMh6PdoYfwoWmtB8iAVEsYfK4FmnzIifuuuPdfiDFEyFj8YmkN9ZzFOBlnigGi06n.Mfw3175ztb3dIRIMIyyrMl1raLGydC59ihLh3HAXiRpStbP1I7rL8ZzsBC6p5H5Cm3uj39xZ6aPedLvAhisiVPXe+4X5JzVRnJRbBeZLmyrkPxuUqKSCO+CmqPQ4Zz.aQt6R8RUkuq8TAzKpVQQ9OUYldeQ12xqDs8nJUH5UH7r7+Vj2U24l5ee6WzOkj1daHNBtqeIW1qUxA3pA4EFPKkE4sDuR52NjEnUGll1vMzqYmAhfR6uU4p.GNXreirGW4BmCEghCCBxZHLact+BnyCV.c9jEPmGt.5rwBnymt.57nKTG7mscqQF0P2kavDs20Vb44436XoZQ9GG6xcnC
-
Why don't you use tableData objects for linking tables?
-
@d-healey would that allow me to have one as a manipulated version of the other ? (I dont want a mirror, more a transform function. I just omitted that from my example since that is not important for the crash repro)
-
@jonhallur No it would be a mirror.
-
When running HISE in debug I will not get a hard crash, but I will get failed
jassert
frequently, both when settings theTable.setContentCallback()
on each compile and often inTable.getTablePointsAsArray()
, but the assert makes no sense, as the data looks right. -
@jonhallur Yes I could also reproduce it in the Debug mode.
At the moment there are no thread safety measures for the internal graph point array (I think when I wrote that logic, every operation was happening on the UI thread).
I've added a read-write lock for accessing / writing the graph points and also fixed the problem that a display index event caused a content change callback (that was indeed a logic error in the script wrapper).
I've committed a fix for both issues, please let me know if the problem persists.
-
@Christoph-Hart Excellent
-
@Christoph-Hart This completely eliminates the
jasserts
in Debug and I can no longer get HISE to crash in Release.I really appreciate the fast response.
Thank you.