Input check within Update() lasting for several frames?

I’m trying to create some basic platformer mechanics. I recently tried to add a fast fall ability where the player can fall quickly to the ground mid-jump if they press down. The code also prevents you from jumping if you’re holding down.

	void Update() {
		if((grounded || !doubleJump) && Input.GetButtonDown("Jump") && cannotJump == false) {
			Jump();
		}	

		//Fast Fall
		if (grounded == false) {
			if (Input.GetAxis("Vertical") < 0) {
				rigidbody2D.AddForce(new Vector2(0, -fastFall));
			}
		}

		//Prevent Jump if Fast Fall is held
		if (grounded && (Input.GetAxis("Vertical") < 0)){ 
			cannotJump = true;
		}

		if (grounded && (Input.GetAxis("Vertical") >= 0)) { 
			cannotJump = false;
		}
		
	}

However, if I fast fall or tap down while on the ground, it takes several frames before I can jump again. It’s supposed to prevent me from jumping only while the button is being held. It’s a noticeable difference (a good ~10 frames) so it’s not that I’m accidentally pressing both down and jump at the same time.

I figured out that the issue had to do with digital axes’ gravity. When a button (as opposed to an analogue source like a joystick) is mapped to an axis, gravity determines how quickly the axis snaps back to its neutral (0) position after the button is released.

The default gravity in my setup was 3; the Vertical axis was taking too long to return to 0 even after I released the down button, so the game prevented me from jumping. I fixed the problem by simply changing digital axis gravity to 1000.

Note: this was with the Rewired input manager from the Asset Store, but I think this would apply to Unity’s own input manager too.