Skip to content
  • Michal Srb's avatar
    drisw: Use separate drisw_loader_funcs for shm · 63c0916a
    Michal Srb authored and Emil Velikov's avatar Emil Velikov committed
    The original code was modifying the global drisw_lf variable, which is bad
    when there are multiple contexts in single process, each initialized with
    different loader. One may support put_image_shm and the other not.
    
    Since there are currently only two possible combinations, lets create two
    global tables, one for each. Lets make them const, since we won't change them
    and they can be shared.
    
    This fixes crash in VLC. It used two GL contexts (each in different thread), one
    was initialized by its Qt GUI, the other by its video output plugin. The first
    one set the put_image_shm=drisw_put_image_shm, the second did not, but
    since the same structure was used, the drisw_put_image_shm was used too. Then
    it crashed because the second loader did not have putImageShm set.
    
    Downstream bug:
    https://bugzilla.opensuse.org/show_bug.cgi?id=1113533
    
    v2: Added Fixes and described the VLC bug.
    
    Fixes: 63c427fa
    
     ("drisw: use putImageShm if available")
    Signed-off-by: default avatarMichal Srb <msrb@suse.com>
    Reviewed-by: default avatarEmil Velikov <emil.velikov@collabora.com>
    63c0916a