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
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