HISE crashes when manipulating table data objects
-
I encountered a crash when manipulating table data objects. I'm using
Table.getTablePointsAsArrayandTable.setTablePointsFromArrayfunctions 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.setContentCallbacksince 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
setContentCallbackis 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+CrpkhQOExample 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
jassertfrequently, 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
jassertsin Debug and I can no longer get HISE to crash in Release.I really appreciate the fast response.
Thank you.