The window-configuration-hook, is a list of functions run whenever the window configuration of a frame changes; such as when a window is deleted, split or resized.
Each function is called with a window as argument, which window depends on what function runs the hook.
When a new frame is created, this hook is not run on the newly created window, please use the create-frame-hook instead, where each function recieves the frame as argument.
There is no guarantee that this will only be run at the end of some function that changes the window configuration (read layout), in fact it can be run several times while the window layout changes.
The core functions that run this hook try to ensure that it does not cause infinite loops, but if you run some functions that change the layout expect trouble.
Here is a complete list of core functions, running the hook. All other window manipulating functions call these and therefore run the hook at some point in time. If not, that's a bug, and you should report it as such.
delete-window See Deleting Windows.delete-other-windows See Deleting Windows.set-window-buffer See Buffers and Windows.split-window See Splitting Windows.enlarge-window See Resizing Windows.enlarge-window-pixels See Resizing Windows.shrink-window See Resizing Windows.shrink-window-pixels See Resizing Windows.