My release node isn't checking if node is &empty node. The problem is if you set empty_node refcount to be 1 and then increase the ref count using webvtt_ref_node in the webvtt_init_node then you end up with a static node of refcount 2 on your first time.

For example using the current code with your suggestion of the ref count to be 1:
```c++
WEBVTT_EXPORT void 
static webvtt_node empty_node = {
  { 1 }, /* init ref count */ //Change here to 1
  0, /* parent */
  WEBVTT_EMPTY_NODE /* node kind */
};

webvtt_init_node( webvtt_node *node )
{
  if( node != &empty_node ) {
    if( node ) { 
      webvtt_release_node( node );
    }
    node = &empty_node;
    webvtt_ref_node( node );
  }
}

int
main( int argc, char **argv ) {
  Node node;
  // empty_node.refs.value == 2
  return 0;
}
```

However, I don't think my solution is the best and I'll try to come up with a solution.