The issue here was that removing datablock from main database will poke editors update, which includes buttons context to free users of texture. Since Cycles will free datablocks from job thread, it might crash Blender since main thread might be in the middle of drawing. Solved by exposing extra arguments to bpy.data.foo.remove() which indicates whether we want to perform ID user count and interface updates. While scripts shouldn't be using those normally, this is the only way to allow Cycles to skip interface update when removing datablock. Reviewers: mont29 Reviewed By: mont29 Differential Revision: https://developer.blender.org/D2840