display.display() call locking up with generic SSD1306 OLED


New member
I'm using a generic 12864 OLED with the Adafruit SSD1306 library, periodically updating it using elapsedMillis while a higher priority function is running in a timed interrupt (Though I previously had everything running based on elapsedMillis timers and had the same issue). I have an IO pin set to go high when display.display() is called and low when it finishes and can see that initially after bootup it works fine, and display.display() takes 24ms to complete. However eventually the display locks up and stops updating, and I can see that display.display() takes much, much longer, calling immediatley after finishing since it takes longer than the elapsedMillis interval to run.
The display has integrated 4.7k pullup resistors, I added additional pullups which seemed to help the issue but didn't solve it. I can't reliably cause the issue to occur, either.
What could be causing this?