)]}'
{"id":"openstack%2Fliberasurecode~434696","triplet_id":"openstack%2Fliberasurecode~master~Ie7073738428a71910016e910a66dbd92ca98eb92","project":"openstack/liberasurecode","branch":"master","topic":"bug/1666674","hashtags":[],"change_id":"Ie7073738428a71910016e910a66dbd92ca98eb92","subject":"jerasure: plug memory leaks","status":"MERGED","created":"2017-02-16 07:36:24.000000000","updated":"2017-02-21 21:13:05.000000000","submitted":"2017-02-21 21:13:05.000000000","submitter":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"total_comment_count":3,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"8a3824710fb1400293db646503cb9f011f8dd8a8","_number":434696,"virtual_id_number":434696,"owner":{"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"all":[{"value":0,"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},{"value":2,"date":"2017-02-21 21:13:05.000000000","post_submit":true,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},{"value":0,"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"all":[{"value":2,"date":"2017-02-21 20:56:18.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},{"value":0,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},{"value":0,"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"all":[{"value":1,"date":"2017-02-21 20:56:18.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},{"value":0,"_account_id":3,"name":"Jenkins","username":"jenkins"},{"value":0,"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},{"value":0,"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":3,"name":"Jenkins","username":"jenkins"},{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},{"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2017-02-20 06:37:54.000000000","updated_by":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"reviewer":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"state":"REVIEWER"},{"updated":"2017-02-21 20:56:18.000000000","updated_by":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"reviewer":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"state":"REVIEWER"},{"updated":"2017-02-21 21:13:05.000000000","updated_by":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"reviewer":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"state":"REVIEWER"}],"messages":[{"id":"1cb5fe24c2d2fac11347f6aa667165dc69cda3eb","author":{"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},"date":"2017-02-16 07:36:24.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"cfc551eba4fd359e914bb61737de57414968e678","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2017-02-16 07:50:01.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-liberasurecode-unit http://logs.openstack.org/96/434696/1/check/gate-liberasurecode-unit/16a7411/ : SUCCESS in 10m 56s","accounts_in_message":[],"_revision_number":1},{"id":"2588c2907a75b9f76148dca62b265300c8bac2d8","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2017-02-16 17:59:40.000000000","message":"Patch Set 1: Code-Review+1\n\nThanks you! I was trying to figure out what do do about the jerasure leaks. Am I right to think that the same lazy-initialization of these globals will prevent trouble if two descriptors have overlapping lifetimes? As with\n\n int desc1 \u003d liberasurecode_instance_create(...);\n int desc2 \u003d liberasurecode_instance_create(...);\n /* do some encoding with either */\n liberasurecode_instance_create(desc1);\n /* do some more encoding with desc2 */\n liberasurecode_instance_create(desc2);","accounts_in_message":[],"_revision_number":1},{"id":"87d08834e1a7a94e1154c3d000d689c7255753d7","author":{"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},"date":"2017-02-16 20:21:57.000000000","message":"Patch Set 1:\n\n\u003e Thanks you! I was trying to figure out what do do about the\n \u003e jerasure leaks. Am I right to think that the same lazy-initialization\n \u003e of these globals will prevent trouble if two descriptors have\n \u003e overlapping lifetimes? As with\n \u003e \n \u003e int desc1 \u003d liberasurecode_instance_create(...);\n \u003e int desc2 \u003d liberasurecode_instance_create(...);\n \u003e /* do some encoding with either */\n \u003e liberasurecode_instance_create(desc1);\n \u003e /* do some more encoding with desc2 */\n \u003e liberasurecode_instance_create(desc2);\n\nI assume you mean destroy in the second half of your example?\n\nYes - jerasure lazy init will be fine with _single threaded_ multi-context overlap. The lazy init will pick up that the table is missing and recreate it.\n\nThere is, however, a window for disaster if we have multiple threads. Take your example and imagine that desc1 and desc2 operate in two separate threads. A free of the data structures could occur while they are in use in the other thread. I haven\u0027t checked, but I don\u0027t think jerasure has any locking around them. (You could also get overlapping allocations leading to leaks and a whole raft of fun issues.)\n\nFundamentally this is a jerasure issue. (don\u0027t use unprotected global state!) We could potentially work around it if we\u0027re concerned about multi-threaded users.\n\nThis won\u0027t be a problem for pyeclib/swift, as far as I\u0027m aware: using Python means we probably do everything single-threaded anyway...","accounts_in_message":[],"_revision_number":1},{"id":"1ffb725f1c33db0917ad67a5f0cc785ce43fd272","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2017-02-20 06:37:54.000000000","message":"Patch Set 1: Code-Review+2\n\nYes, I did indeed mean liberasurecode_instance_destroy().\n\nI think you\u0027re right:\n\n- this should be fine for single threaded applications,\n- this could certainly leak in a multi-threaded context, and\n- considering all of the above, this really falls on jerasure to fix.\n\nI\u0027m not sure about how much it matters for swift/pyeclib -- we do occasionally run concurrent python processes (particularly for the replicator/reconstructor), and I\u0027m not (yet) clear on how shared libraries behave in such a situation. Seems like we\u0027re probably not in any *worse* a situation?","accounts_in_message":[],"_revision_number":1},{"id":"fbb9859c0dd18282b39a53922aaddd234efb72b3","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2017-02-20 16:14:18.000000000","message":"Patch Set 1: Verified-1\n\nMerge Failed.\n\nThis change or one of its cross-repo dependencies was unable to be automatically merged with the current state of its repository. Please rebase the change and upload a new patchset.","accounts_in_message":[],"_revision_number":1},{"id":"3330689641f820c214bf42c9156a1b3d5f1eace0","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-20 16:16:00.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.","accounts_in_message":[],"_revision_number":2},{"id":"4e38616a17074c1e893ec4c28008572ab7a1017a","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-20 16:16:27.000000000","message":"Patch Set 2:\n\nJust rebased to the master latest. Still under reviewing.","accounts_in_message":[],"_revision_number":2},{"id":"3c0993d82f0cb721c8d2ee8c5ca4a833b97d1e17","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2017-02-20 16:26:41.000000000","message":"Patch Set 2: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-liberasurecode-unit http://logs.openstack.org/96/434696/2/check/gate-liberasurecode-unit/bdfef63/ : SUCCESS in 10m 00s","accounts_in_message":[],"_revision_number":2},{"id":"bda52e767eef9a41999b1f3ac1d7cc366e79d149","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-20 17:15:09.000000000","message":"Patch Set 2: Code-Review+1\n\n(1 comment)\n\nOK, Tim looks to leave great comment and we still need to take care of the multi threading situation. That\u0027s ok in the follow ups. And it looks like that works well with our new gate for valgrind (yey) but I\u0027m still have questions how this patch works well. Please checkout my comments inline.\n\nThanks!","accounts_in_message":[],"_revision_number":2},{"id":"01ee70b389bc9a5c576cab762d13985b224aa7f9","author":{"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},"date":"2017-02-20 23:11:32.000000000","message":"Patch Set 2:\n\n(1 comment)\n\n\u003e OK, Tim looks to leave great comment and we still need to take care\n \u003e of the multi threading situation. That\u0027s ok in the follow ups. And\n \u003e it looks like that works well with our new gate for valgrind (yey)\n \u003e but I\u0027m still have questions how this patch works well. Please\n \u003e checkout my comments inline.\n\nReplied inline.\n\nRe: Tim\u0027s comments, I think we might actually be OK in the multithreaded case, depending on the behaviour of dlopen(). If the second dlopen() creates a new copy of the library in a different chunk of the address space, we\u0027re fine. If it returns a handle to the same library, then we\u0027re in trouble. I\u0027m not an expert on the behaviour of dlopen(), we can follow it up later.","accounts_in_message":[],"_revision_number":2},{"id":"6a5ad3351bff3e8b99de9dde2eea7e0a2aeb03d9","author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"date":"2017-02-21 15:03:26.000000000","message":"Patch Set 2:\n\nMulti*process* seems to be fine; there\u0027s a new copy of the library for each process. To test this, I first added a simple counter that increments/decrements during register/unregister. I then wrote a small program to create a descriptor, sleep, create a second one, then close both, printing the current count between each step. By kicking off a second process during the sleep, I verified that both get the expected 0 -\u003e 1 -\u003e 2 -\u003e 1 -\u003e 0 counts.\n\nMulti*threaded* still seems likely to be problematic, although I haven\u0027t tested it (I\u0027m not terribly familiar with threads in C). However, I\u0027m fairly certain *any* consumer of jerasure will run into the same issues until *jerasure* fixes it. As Daniel pointed out, you really need locking when using global state. Maybe as a follow-up we could do that locking *for them*, but that seems a larger, separate piece of work.","accounts_in_message":[],"_revision_number":2},{"id":"7ec81188fbc257bbfde604988c910b03857513e0","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-21 20:52:42.000000000","message":"Patch Set 3: Published edit on patch set 2","accounts_in_message":[],"_revision_number":3},{"id":"d820f57a0ff3ace1312a973f5147f7d98122f674","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-21 20:53:28.000000000","message":"Patch Set 2:\n\n(1 comment)\n\nThanks Daniel for your clarification!\n\nI checked the routine is going to the galois_w32_region. That much makes me sense. The fix looks good to me.","accounts_in_message":[],"_revision_number":2},{"id":"c6a5906951f62d90c9ff75c17dc3c4d675dd7af2","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-21 20:53:49.000000000","message":"Topic changed from jerasure-plug-memory-leaks to bug/1666674","accounts_in_message":[],"_revision_number":3},{"id":"2b86232d79e8b3981ea9c9c2a66f2ca22704ec19","author":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"date":"2017-02-21 20:56:18.000000000","message":"Patch Set 3: Code-Review+2 Workflow+1\n\nThe change from patch set 2 is just updating the commit message to enable us to track the bug with launchpad so no code change exists.\n\nSince Tim already add his +2 on the patch set 2, so I think I am able to add +A for this with my +2.\n\nThis work is really great and I confirmed this patch fixes the leak with jerasure. Hope we could have the run-able test in the gate as well as other backends.","accounts_in_message":[],"_revision_number":3},{"id":"88c863eab449b8b95eca788bbaf5bae9ecd911b1","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2017-02-21 21:03:57.000000000","message":"Patch Set 3: Verified+1\n\nBuild succeeded (check pipeline).\n\n- gate-liberasurecode-unit http://logs.openstack.org/96/434696/3/check/gate-liberasurecode-unit/51c0052/ : SUCCESS in 7m 18s","accounts_in_message":[],"_revision_number":3},{"id":"ecd3589994d62463279b7997772b0f9336f4d0be","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2017-02-21 21:04:07.000000000","message":"Patch Set 3: -Verified\n\nStarting gate jobs.\nhttp://status.openstack.org/zuul/","accounts_in_message":[],"_revision_number":3},{"id":"090feb608418dae299bf7f8d4b0807f3f5d7a4aa","date":"2017-02-21 21:13:05.000000000","message":"Change has been successfully merged into the git repository by Jenkins","accounts_in_message":[],"_revision_number":3},{"id":"8a3824710fb1400293db646503cb9f011f8dd8a8","author":{"_account_id":3,"name":"Jenkins","username":"jenkins"},"date":"2017-02-21 21:13:05.000000000","message":"Patch Set 3: Verified+2\n\nBuild succeeded (gate pipeline).\n\n- gate-liberasurecode-unit http://logs.openstack.org/96/434696/3/gate/gate-liberasurecode-unit/848cabd/ : SUCCESS in 8m 18s","accounts_in_message":[],"_revision_number":3}],"current_revision_number":3,"current_revision":"4ab1336cabe0c1f5d7fc18c21b78f5d21aca5b60","revisions":{"777aa5c0ae637334a767609fd4bccb5a6e5a8bd3":{"kind":"REWORK","_number":1,"created":"2017-02-16 07:36:24.000000000","uploader":{"_account_id":25109,"name":"Daniel Axtens","email":"dja@axtens.net","username":"dja"},"ref":"refs/changes/96/434696/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/liberasurecode","ref":"refs/changes/96/434696/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/1"}}},"commit":{"parents":[{"commit":"2ee4473ca2bffdf9efc23528314a80ace52adaf1","subject":"Fix memory leaks in liberasurecode_test","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/2ee4473ca2bffdf9efc23528314a80ace52adaf1"}]}],"author":{"name":"Daniel Axtens","email":"dja@axtens.net","date":"2017-02-16 06:16:28.000000000","tz":660},"committer":{"name":"Daniel Axtens","email":"dja@axtens.net","date":"2017-02-16 07:18:06.000000000","tz":660},"subject":"jerasure: plug memory leaks","message":"jerasure: plug memory leaks\n\nJerasure inits some global variables on init.\nWe need to free them, or we\u0027ll leak memory.\n\nChange-Id: Ie7073738428a71910016e910a66dbd92ca98eb92\nSigned-off-by: Daniel Axtens \u003cdja@axtens.net\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/777aa5c0ae637334a767609fd4bccb5a6e5a8bd3"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/777aa5c0ae637334a767609fd4bccb5a6e5a8bd3"}]},"branch":"refs/heads/master"},"a3fb5d2b001ad61d42fa2aed6994ab664dac294a":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2017-02-20 16:16:00.000000000","uploader":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"ref":"refs/changes/96/434696/2","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/liberasurecode","ref":"refs/changes/96/434696/2","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/2"}}},"commit":{"parents":[{"commit":"c9136a62b6e7cc8701cd7206ef0367520a20b8b9","subject":"Fix valgrind-check and memory leak","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/c9136a62b6e7cc8701cd7206ef0367520a20b8b9"}]}],"author":{"name":"Daniel Axtens","email":"dja@axtens.net","date":"2017-02-16 06:16:28.000000000","tz":660},"committer":{"name":"Kota Tsuyuzaki","email":"tsuyuzaki.kota@lab.ntt.co.jp","date":"2017-02-20 16:15:51.000000000","tz":-480},"subject":"jerasure: plug memory leaks","message":"jerasure: plug memory leaks\n\nJerasure inits some global variables on init.\nWe need to free them, or we\u0027ll leak memory.\n\nChange-Id: Ie7073738428a71910016e910a66dbd92ca98eb92\nSigned-off-by: Daniel Axtens \u003cdja@axtens.net\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/a3fb5d2b001ad61d42fa2aed6994ab664dac294a"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/a3fb5d2b001ad61d42fa2aed6994ab664dac294a"}]},"branch":"refs/heads/master"},"4ab1336cabe0c1f5d7fc18c21b78f5d21aca5b60":{"kind":"NO_CODE_CHANGE","_number":3,"created":"2017-02-21 20:52:42.000000000","uploader":{"_account_id":4608,"name":"Kota Tsuyuzaki","email":"bloodeagle40234@gmail.com","username":"tsuyuzaki-kota"},"ref":"refs/changes/96/434696/3","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/liberasurecode","ref":"refs/changes/96/434696/3","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/liberasurecode refs/changes/96/434696/3"}}},"commit":{"parents":[{"commit":"c9136a62b6e7cc8701cd7206ef0367520a20b8b9","subject":"Fix valgrind-check and memory leak","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/c9136a62b6e7cc8701cd7206ef0367520a20b8b9"}]}],"author":{"name":"Daniel Axtens","email":"dja@axtens.net","date":"2017-02-16 06:16:28.000000000","tz":660},"committer":{"name":"Kota Tsuyuzaki","email":"tsuyuzaki.kota@lab.ntt.co.jp","date":"2017-02-21 20:50:03.000000000","tz":0},"subject":"jerasure: plug memory leaks","message":"jerasure: plug memory leaks\n\nJerasure inits some global variables on init.\nWe need to free them, or we\u0027ll leak memory.\n\nPartial-Bug: #1666674\n\nChange-Id: Ie7073738428a71910016e910a66dbd92ca98eb92\nSigned-off-by: Daniel Axtens \u003cdja@axtens.net\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/4ab1336cabe0c1f5d7fc18c21b78f5d21aca5b60"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/liberasurecode/commit/4ab1336cabe0c1f5d7fc18c21b78f5d21aca5b60"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[],"submit_requirements":[]}
