We'll keep a front and back buffer for each surface; the front is generally currently being displayed in the UI process, and the back is the one we'll paint into. Swap the two surfaces each time we paint; since we synchronize with the UI process, the old front surface will generally be out-of-use by the render server by the time we paint again. However, since render server commits are asynchronous and we have no way to syncronize with them yet, we have to check if the (swapped to front) back buffer is in use, and create a new front buffer if it is. Triple-buffering would solve this problem, as would synchronization with the render server, as would a pool of surfaces - we will revisit these solutions in future patches.
Created attachment 228209 [details] patch
http://trac.webkit.org/changeset/166541