Fail loudly on a touch read, stop the workers before their sockets close, and file down the small edges
This commit is contained in:
@@ -170,23 +170,24 @@ func findDisplay(fd int) (connID, crtcID uint32, err error) {
|
||||
}
|
||||
|
||||
// The card number is not stable across machines, so the card driving a
|
||||
// connected display is the one we want.
|
||||
func openCard() (int, error) {
|
||||
// connected display is the one we want, and the display it found comes back
|
||||
// with it.
|
||||
func openCard() (fd int, connID, crtcID uint32, err error) {
|
||||
paths, err := filepath.Glob("/dev/dri/card*")
|
||||
if err != nil {
|
||||
return -1, err
|
||||
return -1, 0, 0, err
|
||||
}
|
||||
for _, p := range paths {
|
||||
fd, err := unix.Open(p, unix.O_RDWR|unix.O_CLOEXEC, 0)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if _, _, err := findDisplay(fd); err == nil {
|
||||
return fd, nil
|
||||
if connID, crtcID, err := findDisplay(fd); err == nil {
|
||||
return fd, connID, crtcID, nil
|
||||
}
|
||||
unix.Close(fd)
|
||||
}
|
||||
return -1, fmt.Errorf("no drm device with a connected display")
|
||||
return -1, 0, 0, fmt.Errorf("no drm device with a connected display")
|
||||
}
|
||||
|
||||
func (fb *framebuffer) addScanout(i int) error {
|
||||
@@ -223,7 +224,7 @@ func (fb *framebuffer) addScanout(i int) error {
|
||||
}
|
||||
|
||||
func openFramebuffer() (*framebuffer, error) {
|
||||
fd, err := openCard()
|
||||
fd, connID, crtcID, err := openCard()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -236,11 +237,6 @@ func openFramebuffer() (*framebuffer, error) {
|
||||
return nil, fmt.Errorf("take drm master: %w", err)
|
||||
}
|
||||
|
||||
connID, crtcID, err := findDisplay(fd)
|
||||
if err != nil {
|
||||
fb.close()
|
||||
return nil, err
|
||||
}
|
||||
mode, err := preferredMode(fd, connID)
|
||||
if err != nil {
|
||||
fb.close()
|
||||
|
||||
Reference in New Issue
Block a user