SIGQUIT breaks the pipe

Linux ping utility can produce some statistics on receiving SIGQUIT without terminating. It looks like this:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=45 time=37.8 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=45 time=36.3 ms 2/2 packets, 0% loss, min/avg/ewma/max = 36.399/37.126/37.672/37.854 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=45 time=36.2 ms ^C --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 36.294/36.849/37.854/0.711 ms 

As you can see I sent SIGQUIT right after second request by pressing Ctrl+\ and immediately got statistics.

But things are different when I’m trying to use ping with pipe. The command:

ping -O 8.8.8.8 | while read pong; do echo "$  (date): $  pong"; done 

This time sending SIGQUIT (Ctrl+\) breaks the pipe:

Tue Jul 30 18:15:20 EEST 2019: PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. Tue Jul 30 18:15:20 EEST 2019: 64 bytes from 8.8.8.8: icmp_seq=1 ttl=45 time=71.1 ms Tue Jul 30 18:15:21 EEST 2019: 64 bytes from 8.8.8.8: icmp_seq=2 ttl=45 time=51.4 ms Tue Jul 30 18:15:22 EEST 2019: 64 bytes from 8.8.8.8: icmp_seq=3 ttl=45 time=54.5 ms Tue Jul 30 18:15:23 EEST 2019: 64 bytes from 8.8.8.8: icmp_seq=4 ttl=45 time=56.5 ms Tue Jul 30 18:15:24 EEST 2019: 64 bytes from 8.8.8.8: icmp_seq=5 ttl=45 time=56.5 ms Tue Jul 30 18:15:25 EEST 2019: 64 bytes from 8.8.8.8: icmp_seq=6 ttl=45 time=60.1 ms 6/6 packets, 0% loss, min/avg/ewma/max = 51.421/58.394/63.927/71.104 ms Quit (core dumped) 

Could someone please tell what is the cause of this behaviour?