Small sample in opengl es 3, wrong gamma correction

I have a small sample, es-300-fbo-srgb, supposed to showing how to manage gamma correction in opengl es3.

Essentially I have:

[li]a GL_SRGB8_ALPHA8 texture TEXTURE_DIFFUSE[/li][li]a framebuffer with another GL_SRGB8_ALPHA8 texture on GL_COLOR_ATTACHMENT0 and a GL_DEPTH_COMPONENT24 texture on GL_DEPTH_ATTACHMENT[/li][li]the back buffer of my default fbo is GL_LINEAR[/li][li]GL_FRAMEBUFFER_SRGB initially disabled.[/li][/ul]

I get this instead of this

Now, if I recap the display metho, this is what I do:

[li]I render the TEXTURE_DIFFUSE texture on the sRGB fbo and since the source texture is in sRGB space, my fragment shader will read automatically a linear value and write it to the fbo. Fbo should contain now linear values, although it is sRGB, because GL_FRAMEBUFFER_SRGB is disabled, so no linear->sRGB conversion is executed.[/li]
[li]I blit the content of the fbo to the default fbo back buffer (through a program). But since the texture of this fbo has the sRGB component, on the read values a wrong gamma operation will be performed because they are assumed in sRGB space when they are not.[/li]
[li]a second gamma operation is performed by my monitor when it renders the content of the default fbo[/li][/ul]

So my image is, if I am right, twice as wrong…

Now, if I glEnable(GL_FRAMEBUFFER_SRGB) just once I get instead this
The image looks like it have been too many times sRGB corrected…

But if I enable it at the first passage and disable it at the second one, then it works, but I don’t why…