1501 k my interpretation of the condition for forwarding the defaults to the backend a second time in libusb_init was incorrect in f7084 by harbulot, the condition is changed from (!ctx) to (ctx || !usbi_default_context) this results in forwarding the values when there is a ctx, which wasn't previously the case. there might be a logic error here regarding default ctxs? i'll increase git's diff output 1513 1517 ok in libusb_init, ctx is the pointer-to-a-pointer passed in. nowadays if it is null, a default context is supposedly used. meanwhile _ctx with its preceding underscore, is a zero initialised block of memory that will be the new ctx, allocated on the heap. it looks like this memory is allocated even if a default context might be reused. it looks like a logic bug may be present. it appears that usbi_default_context is uninitialised, so likely default_context_refcnt should be checked rather than it. 1521 default_context_refcnt is also uninitialised. it would make sense to fix these. I wonder if c supports static local variables. I guess I should maybe know that whether it's relevant or not. looks like they are. 1524. should be accessed with lock I imagine. I think there's some existing static locked stuff, unsure, can see what degree of protection against initialisation order they're using. I think they have a list of contexts maybe? unsure? oh great there's a default_context_lock and an active_contexts_list interestingly the check already compares the content of the structure with zero. I wonder if things are auto filled with zeros. it just contains two pointers, prev and next. maybe websearching can help me 1528 the internet does not yet appear to believe that happens. maybe they use some compile flag, i'll glance at them. they pass -std=gnu11 maybe i'll glance through c11 stuff and websearch more 1531 ok at [1]journaldev.com I found "The default value of the initialization of the Static variable is zero (0)." maybe I can find something more authoritative ok I found a second source saying static and global variables are initialised to zero if not initialised explicitly. so I better reconsider this code, which looks much better now. 1534 References 1. http://journaldev.com/