-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

Hi, Mark,

I'd like to propose the attached patch for review.  It replaces
tsleep's with sx_sleep's, then checks the return value and quit the loop.

Cheers,
- -- 
Xin LI <delp...@delphij.net>    https://www.delphij.net/
FreeBSD - The Power to Serve!           Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0

iQIcBAEBCgAGBQJUVpO0AAoJEJW2GBstM+nsTcoQAKQglUQUKCh4h+flynK+of1J
I8pyCJTqkJHsvQu7Lj8Nh4gd6OQM3+XdpEGymA/wB1Q906cNI8ieLwuXCOmCxYhw
xs2XJL5cyp1myDqCp3BRrNta8PPSF8gxfnCeU/0LuItrvcNaE3axNb/eu4g3u5s7
NZObx84C03uRoHMz+9qG0qkZbutY/qN8YP3DQ1WvkYom/i4UT2NGa1EgHLYa9Ofu
REQ/lADumxqn5Cw6viKym1wI1HrCu00X602jGjivEzn1L7DSfKFJjckyLC2IbbdY
Ydy4ejsILJRPFDt6PrcSWkaSBIy585wP90YsFvSK4riyy1i3HUF4pE5wQPPG/ogV
ATm4S9GZgr4mM3SHZrcaTDyrm9BEsEizqBs/F3yyuKBqZt0xtTjv+tupCN5AG1LX
DnfgLj7pNAW2SIF7lul34/CzisoKB7b5oEpL9YWOh8DvZiEgHMex4nRqTNAt9T8F
7f5bGvcMHfkIOQIUanxlganUW2ZgVaDPYQADjrEsfqD2pTwwK7glN0jXKJ9YStGW
kzbjAQil9X/fliVSzPubbO0XTqAtjnPwONBbjw06vlrwZlkHbLOTz0VVZ3cAJcei
4CkCiEQtuFWbD9QVCUe6snztRRTI542dIlWSDPhSxYV3+hrkCgCeJ3fMvTutf7YZ
ejIPZ/NOkhddVmvjMHKw
=XrYs
-----END PGP SIGNATURE-----
Index: sys/dev/random/random_adaptors.c
===================================================================
--- sys/dev/random/random_adaptors.c    (revision 273982)
+++ sys/dev/random/random_adaptors.c    (working copy)
@@ -217,7 +217,7 @@ random_adaptor_read(struct cdev *dev __unused, str
 
        /* (Un)Blocking logic */
        error = 0;
-       while (!random_adaptor->ra_seeded()) {
+       while (!random_adaptor->ra_seeded() && error == 0) {
                if (flags & O_NONBLOCK) {
                        error = EWOULDBLOCK;
                        break;
@@ -224,7 +224,8 @@ random_adaptor_read(struct cdev *dev __unused, str
                }
 
                /* Sleep instead of going into a spin-frenzy */
-               tsleep(&random_adaptor, PUSER | PCATCH, "block", hz/10);
+               error = sx_sleep(&random_adaptor, &random_adaptors_lock,
+                   PUSER | PCATCH, "block", hz/10);
 
                /* keep tapping away at the pre-read until we seed/unblock. */
                (random_adaptor->ra_read)(NULL, 0);
@@ -298,7 +299,7 @@ random_adaptor_write(struct cdev *dev __unused, st
 
        random_buf = malloc(PAGE_SIZE, M_ENTROPY, M_WAITOK);
 
-       while (uio->uio_resid > 0) {
+       while (uio->uio_resid > 0 && error == 0) {
                c = MIN(uio->uio_resid, PAGE_SIZE);
                error = uiomove(random_buf, c, uio);
                if (error)
@@ -306,7 +307,8 @@ random_adaptor_write(struct cdev *dev __unused, st
                (random_adaptor->ra_write)(random_buf, c);
 
                /* Introduce an annoying delay to stop swamping */
-               tsleep(&random_adaptor, PUSER | PCATCH, "block", hz/10);
+               error = sx_sleep(&random_adaptor, &random_adaptors_lock,
+                   PUSER | PCATCH, "block", hz/10);
        }
 
        free(random_buf, M_ENTROPY);

Attachment: random-tsleep.diff.sig
Description: Binary data

_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to